バッチファイルで”%~dp0″等の意味につて

バッチファイルで “%” や “~” がを記述していますが、ぱっと見わかりにくいです。
うまく利用すればかなり便利になるとは思いますが、バッチファイルを編集するたびに分からなくなって調べ直しているのでまとめておきます。
 
 
引数の取り込み方

%0 バッチファイル自身
%1 バッチファイルの1つめの引数
%n バッチファイルのn個目の引数(nを数字に置き換える)

 
 
[~]を付けるとディレクトリバスやファイルパスから[“]を削除して展開する

%~0 全ての引用句[“]を削除して%Iを展開する
%~f0 %0を完全修飾パス名に展開する
%~d0 %0をドライブ文字だけに展開する
%~p0 %0をパス名だけに展開する
%~n0 %0をファイル名だけに展開する
%~x0 %0をファイル拡張子だけに展開する
%~s0 展開されたパスは短い名前だけを含む
%~a0 %0をファイルの属性に展開する
%~t0 %0をファイルの日付/時刻に展開する
%~z0 %0ファイルのサイズに展開する
%~dp0 %0をドライブ文字とパス名だけに展開する
%~nx0 %0をファイル名と拡張子だけに展開する
%~fs0 %0を完全なパスと短い名前だけに展開する
%~ftza0 %0をDIRコマンドの出力行のように展開する

 
ここで”0″は、%0(バッチファイル自身)です。
他の数字に置き換えができます。
 
 
 
このあたりの詳しい説明は、コマンドプロンプトでfor /?を実行すると詳細が見られますのでそちらも見て下さい。
 
 

bat起動時に割り当てた引数が空か確認する

batを起動したときに、引数を割り当てし忘れて思わぬ誤動作をしてしまいました。
引数が割り当てされているか確認するときに、少々はまったので覚え書きです。
 
 
第1引数(%~1)が割り当てされているか確認する方法です。

 
注意としては、引数を確認するときに%~1を””で囲む必要があります。
“”で囲まない場合はエラーが発生します。
 
 

.batファイルを実行するとnullのファイルが作成されてしまう

バッチファイルにnullコマンドを記載して実行すると、実行したフォルダ内にnullファイルが作成されてしまいました。
原因を調べてみると、Windowsのバッチファイルには「null」ではなく「nul」と入力しないとならないみたいです。
 
こんな単純なことですが、結構な時間はまってしまいました・・・
 
 

バッチファイルを呼び出ししたときの動作の違い

バッチファイルからバッチファイルを呼び出しして使用するときに、呼び出しする方法によって動作が変わってくる
 
 
1.バッチファイルを直接指定して起動
呼び出したバッチファイルに処理が移行して、呼び出したバッチファイルが終了したらそのまま処理が終了する。
 
2.callコマンドを指定してバッチファイルを起動
呼び出したバッチファイルの処理が終了するまで呼び出し元バッチファイルの処理が一時停止する。
呼び出したバッチファイルの処理が終了したら呼び出し元バッチファイルの処理に戻る。
呼び出し元バッチファイルの処理はバッチファイル呼び出し後の行から行う。
 
3.startコマンドを指定してバッチファイルを起動
呼び出したバッチファイルの処理中も呼び出し元のバッチファイルの処理を進める。
 
 
コマンドをつけ忘れると思わぬトラブルでしばらく悩むことになるので、基本的にはcallコマンドを使用して処理を行うようにする。