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


この記事はプロモーションを含みます。

Windows

ホーム > コマンドプロンプト・バッチファイル リファレンス

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

はじめに

ここでは、以下のようにディレクトリ名の末尾に連番を付与するためのバッチをご紹介します。
以下は、1日に3回バッチを実行した例です。

20211002_01・・・1回目のバッチ実行
20211002_02・・・2回目のバッチ実行
20211002_03・・・3回目のバッチ実行

実行方法

バッチファイル名が「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

シンプルに連番を生成する

指定した最大値までの連番を作成するだけのサンプルです。

ソースコード

@echo off

rem 連番最大値
set maxNum=10

setlocal enabledelayedexpansion
for /l %%i in (1,1,%maxNum%) do (
	echo %%i
)

pause

実行結果

1
2
3
4
5
6
7
8
9
10
続行するには何かキーを押してください . . .

記事は以上です。

コメント

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