【自分用メモ】【*.bat】使い方メモ


最近バッチファイルで色々やる機会があったので、自分用の使い方とかをとりとめなく書く(都度追記)

batのお決まり

多分ほぼすべてのバッチファイルの最初に書いてあるもの。
ここ以降は記述しなくても絶対に頭で書かれているものと思っておく。

test.bat
@echo off
setlocal
cd /d %~dp0
(省略)
endlocal

@echo off

@を行頭につけるとその行の出力が抑止される。
echo offでバッチファイル内で実行コマンドの出力を抑止できる。
これをバッチの頭で打っておかないと、*.bat内の記述が全て出力される残念なツールになる。

setlocal

このバッチファイルでの環境変数をローカル化してくれる。
トンデモ変数を指定してもこいつがあれば他に危害を加えることはなさそう。

cd /d %~dp0

言わずもがなのcdコマンド。
実行したバッチファイルが置かれたディレクトリに移動する。
/dでドライブを跨いだ移動が可能なので定型文として書いておくと良い気がする。
%~dp0は実行ファイルのフルパスを示す。あとで詳細。

endlocal

setlocalの対となるもの。setlocal以前の設定を復元する。
明示的に書かなくても、setlocalが書かれたbatは暗黙的にendlocalが実行される。
要は、このbatで設定したものはここで終わり!という宣言。

コメント

バッチファイル内のコメントの書き方は何種類かあるみたいだけど、remを使うのが無難だと思う。
rem 〇〇〇で行末までがコメントアウトされる。

変数

バッチファイルの変数は%で参照する。echoを使って出力する。

time.bat
rem ファイル実行時刻を出力する
echo %date%
echo %time%
echo %date% %time%

pause > nul

実行結果

2020/07/15
23:19:08.65
2020/07/15 23:19:08.65

pauseはなにかしらのキーが押されるまで処理を中断するコマンド。
好きなだけ実行時刻を確認したら好きなキーを押すとコマンドプロンプトが閉じる。

echo %date% %time%

変数は%で囲うことで参照できる。
echoコマンドで環境変数のdate(日付)とtime(時刻)を出力している。

バッチパラメーター(%0、%1~9)

上では%~dp0について詳細を書くと書いているが、一緒に書くとやや面倒になるので先に%0だけ書いてみる。

変数を%で囲むと上では書いたけど、じゃあ引数はどうするのという話になる。
引数は第一引数が%1、第二引数が%2…といった具合に頭に%をつけて受け取る。
これをバッチパラメーターというらしい。
  ※1~9までしか入らないので注意する。10以上はいつか書くかも
%0は実行されたバッチファイルを受け取る。

param.bat
rem %0:実行されたバッチファイル名が入る
echo %0

rem %1:第一引数
echo %1

rem %4:第四引数
echo %4

rem %10:10以上は無理
echo %10

実行結果

C:\bat\param.bat AA BB CC DD
"C:\bat\param.bat"
AA
DD
AA0

%0は実行されたバッチファイル自身をフルパスで受け取っている。
%10%10に分解されAA0と出力された。

%0が分かったところでいよいよ%~dp0について考えてみる。

パス演算子

%~dp0は以下の複数の要素で成り立っている。
 ① %~0
 ② d
 ③ p

①については上で書いた通りである。
~をつけると" "を削除して%0を展開できる。

childa.bat
echo %0
echo %~0
pause > nul
"C:\bat\childa.bat"
C:\bat\childa.bat

" "が消えた。

②のdについて実際に見てみよう。

d0.bat
echo %~d0
pause > nul
C:

ドライブ文字だけが表示された。ドライブの d である。わかりやすい。
これは%0に対するドライブ文字を示している。
つまりDドライブ配下のバッチを実行するとD:が出力される。

③のpについて同様に見てみよう。

p0.bat
echo %~p0
pause > nul
\bat\

パスが表示された。パスの p である。わかりやすい。
上記同様、%0に対するパスである。

では合わせてみよう。

dp0.bat
echo %~dp0
pause > nul
C:\bat\

ドライブ文字込みのパスが表示された。

この~d~pのことをパス演算子と呼ぶらしい。

つまりcd /d %~dp0は実行されたbatが存在するパスへ移動するコマンドとなる。
(/dでドライブを跨いだ移動ができる)
batと同じパスに使用するファイルを置くといちいちパスを指定せずに実行可能。

以下参照。
【自分用メモ】【*.bat】パス演算子

編集中..