0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

「.bat」のメモ

Last updated at Posted at 2018-11-03

★はじめに

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

★お試しした内容

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

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

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

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

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

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

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

エディタの設定を「読み書きを禁止する」に設定して、開いたままにしておく。
スクリーンショット 2018-11-03 16.09.20.png

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

ファイルのプロパティで「読み書き禁止」に設定する。
スクリーンショット 2018-11-03 16.39.44.png

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

①準備〜結果

  〜〜編集中〜〜

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

・やること
・CSVファイルの中身を読み込むこととする。
スクリーンショット 2018-11-03 16.07.48.png

実行コマンド

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

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
実行結果

別のプロセスが使用中(読み込みには失敗)ですが、戻り値はになりました。
スクリーンショット 2018-11-03 16.32.56.png

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

やること

②と同様。

実行コマンド

②と同様。

実行結果

アクセスが拒否されていますが、戻り値はになりました。
スクリーンショット 2018-11-03 16.40.37.png

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

値も取得されています。
スクリーンショット 2018-11-03 16.47.03.png

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

「③おまけ(アクセス権が無い場合)」と同じようになりました。
実行するユーザによって変わるのかな??
スクリーンショット 2018-11-03 16.40.37.png

★さいごに

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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?