WINスクリプトメモ

更新くんを毎日起動時にバックアップするためのbatファイルを作ったときのメモ。

@echo off
rem ——————–環境変数設定——————–
rem コピー先のフォルダを残す数を指定
set dst_num=30
rem コピー先ディレクトリを指定
set “dst=C:更新くんバックアップ(直近30日分)”
rem ——————–フォルダ名の日付時刻——————–
rem yyMMdd_Hmm
rem 自分用(17/08/30 (水) 17:35->170830_1735)
rem set mydate=%date:~0,2%%date:~3,2%%date:~6,2%%time:~0,2%%time:~3,2% rem 初期設定(2017/08/30 17:35 -> 170830_1735) set mydate=%date:~2,2%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%
rem スペースを0に置き換える
set mydate=%mydate: =0%
rem ——————–フォルダ作成——————–
rem dirでコピー先のフォルダをフォルダ名のみ日付順で表示し、新しい方からdst_num個飛ばし、該当フォルダがあれば削除する
for /f “skip=%dst_num%” %%a in (‘dir “%dst%” /ad-s /b /o-n’) do (
echo 削除:”%dst%\%%a”
rd /s /q “%dst%\%%a”
)
rem dirでコピー先のフォルダをフォルダ名のみ日付順で表示し、新しい方からdst_num-1個飛ばし、該当フォルダがあればリネーム
set /a dst_num1=dst_num-1
for /f “skip=%dst_num1%” %%a in (‘dir “%dst%” /ad-s /b /o-n’) do (
ren “%dst%\%%a” “%mydate%”
echo コピー先:%dst%\%mydate%^(差分:%dst%\%%a^)
)
rem コピー先に名前が変数mydateなフォルダが無ければ作成
if not exist “%dst%\%mydate%” (
md “%dst%\%mydate%”
echo コピー先:%dst%\%mydate%^(新規^)
)
rem ——————–ログ作成——————–
rem コピー先に概要ログを作成
echo %mydate% >> “%dst%\robocopy_summary.txt”
rem ——————–robocopy——————–
rem コピー元ディレクトリを指定
set “src=C:\更新くん”
rem コピー先サブディレクトリを指定
set “dst_sub=”
rem robocopyサブルーチンを実行
call :copysub
echo 処理終了
pause
exit
:copysub
rem ——————–robocopyサブルーチン——————–
echo %src%^-^>%dst%\%mydate%%dst_sub%
rem 詳細ログがコピー先のフォルダ内に出力される
robocopy “%src%” “%dst%\%mydate%%dst_sub%” /MIR /XO /NP /XA:SH /R:3 /W:5 /LOG+:”%dst%\%mydate%\robocopy_details.txt” /XD “C:\DTV\backupandsync” “C:\DTV\ts” /FFT
exit

徒然なるままに書いた駄文日記