こんにちは! 健史です。
Windowsでフォルダ内のバッチから上位フォルダにあるバッチファイルを実行する方法です。
実行するバッチと同じフォルダ内であれば、CALL TEST1.bat
1つ上のフォルダであれば、 CALL ..\TEST1.bat
2つ上のフォルダであれば、 CALL ..\..\TEST1.bat
3つ上のフォルダであれば、 CALL ..\..\..\TEST1.bat
1つ上のフォルダであれば、 CALL ..\TEST1.bat
2つ上のフォルダであれば、 CALL ..\..\TEST1.bat
3つ上のフォルダであれば、 CALL ..\..\..\TEST1.bat
'\'は半角の'¥'です。
わかりやすく全角で記述すると'..¥'を付けるだけです。
具体例で説明いたします。
複数構成フォルダで上位フォルダのバッチを実行
フォルダ構成
TEMP20
-階層-1
--階層-1にあるバッチ.bat
--階層-2
---階層-2にあるバッチ.bat
---階層-3
----階層-3にあるバッチ.bat
----階層-3にあるバッチ_見やすいバージョン.bat
※太字は、フォルダです。
バッチファイルを実行
◆階層-1にあるバッチ.bat
echo 階層-1にあるバッチ:CALLされました。フォルダは以下です。 echo 階層-1にあるバッチ:%~dp0
◆階層-2にあるバッチ.bat
echo 階層-2にあるバッチ:CALLされました。フォルダは以下です。 echo 階層-2にあるバッチ:%~dp0
◆階層-3にあるバッチ.bat
echo off echo 階層-3にあるバッチ:実行を開始します。フォルダは以下です。 echo 階層-3にあるバッチ:%~dp0 echo 階層-3にあるバッチ:階層-2にあるバッチをCALLします。 CALL ..\階層-2にあるバッチ.bat echo 階層-3にあるバッチ:階層-1にあるバッチをCALLします。 CALL ..\..\階層-1にあるバッチ.bat pause
今回、[階層-3にあるバッチ.bat]から、[階層-2にあるバッチ.bat][階層-1にあるバッチ.bat]を実行します。
見ずらいので、見やすいバージョンを実行します。
echo off echo 階層-3にあるバッチ:実行を開始します。フォルダは以下です。 echo 階層-3にあるバッチ:%~dp0 echo; echo 階層-3にあるバッチ:階層-2にあるバッチをCALLします。 echo; CALL ..\階層-2にあるバッチ.bat echo; echo 階層-3にあるバッチ:階層-1にあるバッチをCALLします。 echo; CALL ..\..\階層-1にあるバッチ.bat echo; pause
応用編 タイムスタンプ用のバッチ
フォルダ構成
バッチファイルを実行
◆階層-1にあるバッチ.bat
set YYYY=%date:~0,4% set MM=%date:~5,2% set DD=%date:~8,2% set YYYYMMDD=%YYYY%%MM%%DD% echo 階層-1にあるバッチ TIMESTAMP.bat:%YYYYMMDD% set time2=%time: =0% set HH=%time2:~0,2% set MM=%time2:~3,2% set SS=%time2:~6,2% set HHMMSS=%HH%%MM%%SS% echo 階層-1にあるバッチ TIMESTAMP.bat:%HHMMSS% set YMD_HMS=%YYYYMMDD%_%HHMMSS% echo 階層-1にあるバッチ TIMESTAMP.bat:%YMD_HMS%
◆階層-3にあるバッチ.bat
echo off echo 階層-3にあるバッチ:実行を開始します。フォルダは以下です。 echo 階層-3にあるバッチ:%~dp0 echo 階層-3にあるバッチ:階層-1にあるバッチをCALLします。 CALL ..\..\TIMESTAMP.bat echo 階層-3にあるバッチ:%YYYYMMDD% echo 階層-3にあるバッチ:%HHMMSS% echo 階層-3にあるバッチ:%YMD_HMS% pause
実行結果です。
[階層-3にあるバッチ.bat]では[TIMESTAMP.bat]で生成された値を[%YYYYMMDD%]、[%HHMMSS%]、[%YMD_HMS%]で使用できています。
バッチでファイルを出力する際に、タイムスタンプをアンダーバー付きで付けたい場合は
FILE01_%YYYYMMDD%.csv
FILE01_%YYYYMMDD%%HHMMSS%.csv
FILE01_%YMD_HMS%.csv
などと記述します。
実際に使用される場合には、echoやpauseを[rem]でコメントアウトされるか、削除して頂ければと思います。
コメント