Windowsバッチファイル(.bat) 連番生成バッチ

定期バックアップバッチの部品として、ディレクトリ名に付ける連番を生成するバッチを作成しましたので、ここに書いておこうと思います。

実行方法

バッチファイル名が「Numbering.bat」の場合は以下のように実行します。
10行目のように引数1にバックアップ先のディレクトリを渡して実行します。
戻り値は、変数「ret」に格納されます。
以下のように実行した場合、「C:\workspace」配下の「smp」ディレクトリが、「C:\workspace_bk」配下に「smp_YYYYMMDD_01」としてコピーされます。
コピー対象のディレクトリが既にある場合は、「*_02」のようにリネームされてコピーされます。

@echo off

rem バックアップ元ディレクトリ
set backupFrom="C:\workspace\smp"
rem バックアップ先ディレクトリ
set backupTo="C:\workspace\_bk"
rem バックアップ元のフルパスからディレクトリ名抽出
for /f "delims=" %%a in ("%backupFrom%") do set dirName=%%~na
rem バックアップディレクトリ用の連番を生成
call Numbering.bat %backupTo%\%dirName%
rem バックアップ実行
echo d | xcopy /e %backupFrom% %backupTo%\%dirName%_%ret%

exit

ソースコード

こちらのソースでは、文字列の文字数を取得する部品として「GetStrLength.bat」を使用しています。

@echo off

rem 引数を変数に設定
set targetPath=%1
rem 連番最大値
set maxNum=10
rem YYYYMMDD取得
set strDate=%date:~-10,4%%date:~-5,2%%date:~-2,2%

setlocal enabledelayedexpansion
for /l %%i in (1,1,%maxNum%) do (
	set num=%%i
	call GetStrLength.bat !num!
	if %errorlevel% leq 1 (
		set num=0!num!
	)
	set ret=%strDate%_!num!
	if not exist %targetPath%_%strDate%_!num! goto :end
)
:end
endlocal && set ret=%ret%
exit /b

以上で、Windowsバッチファイル(.bat) 連番生成バッチを終了します。

コメント

タイトルとURLをコピーしました