「.bat」のメモ


★はじめに

ちょうど業務で「.bat」を触る機会がありまして、
今後自分が参照するためのメモとして残しておくことにしました。

★お試しした内容

ざっくりと一言で言うと、戻り値(errorlevel)についてをお試ししました。

これまでの私の思い込みだったのですが、
コマンドの実行に失敗した場合、errorlevelは必ず0以外で戻って来るものだと思っていました。
どうやらそうとも限らないようですね。

普段はerrorlevelでの判定を使用することが多いのですが、
状況によってはerrorlevelを使用していても微妙な感じになってしまうこともあるようです。
コマンドの仕様を調べた訳ではありませんが、お試しした結果を載せていこうと思います。

①delで削除に失敗した場合 ←後日
②ファイルの読み込みに失敗した場合

★上記の通り失敗させる方法

基本的には、以下の方法を行うようにします。

その1:ファイルに排他をかておく

エディタの設定を「読み書きを禁止する」に設定して、開いたままにしておく。

その2:ファイルのアクセス権限をなくしておく

ファイルのプロパティで「読み書き禁止」に設定する。

※読み込み禁止だけでも良いと思います。

①準備〜結果

  〜〜編集中〜〜

②準備〜結果(排他取得時)

・やること
・CSVファイルの中身を読み込むこととする。

実行コマンド

・以下のように読み込みを行う。

test.bat
@echo off

rem 実行前の戻り値
echo %errorlevel%

rem csvファイルから取得した値を変数に設定
set /P EXWORD=<C:\Users\Public\test\test.csv

rem 戻り値出力
echo %errorlevel%

rem 取得した値を出力
echo %EXWORD%

rem ちょっとストップ
pause
実行結果

別のプロセスが使用中(読み込みには失敗)ですが、戻り値はになりました。

③おまけ(アクセス権が無い場合)

やること

②と同様。

実行コマンド

②と同様。

実行結果

アクセスが拒否されていますが、戻り値はになりました。

おまけ1(普通に実行した場合)

値も取得されています。

おまけ2(同じファイル名のフォルダが存在する場合)

「③おまけ(アクセス権が無い場合)」と同じようになりました。
実行するユーザによって変わるのかな??

★さいごに

もし、以上のような条件も考慮する必要があるのであれば、
実行前に変数の値を""(空)で初期化しておき、実行後に変数の値が""(空)かどうかを判定してあげる必要があるのかなと思いました。

そこまで対応するのかどうかは状況次第ですが、発生することが無いのであれば、
対応しなくても良いかもしれないですね。