バッチスクリプト-リターンコード
デフォルトでは、コマンドラインの実行が完了すると、実行が成功した場合はゼロを返し、実行が失敗した場合はゼロ以外を返します。実行が失敗した後にバッチスクリプトがゼロ以外の値を返す場合、ゼロ以外の値はエラー番号を示します。次に、エラー番号を使用してエラーの内容を判別し、それに応じて解決します。
以下は、一般的な終了コードとその説明です。
エラーコード | 説明 |
---|---|
0 | プログラムは正常に完了しました。 |
1 | 正しくない機能。アクションがWindowsコマンドプロンプトcmd.exeで認識されないコマンドを実行しようとしたことを示します。 |
2 | システムは、指定されたファイルを見つけることができません。指定された場所にファイルが見つからないことを示します。 |
3 | 指定されたパスが見つかりません。指定されたパスが見つからないことを示します。 |
5 | アクセスが拒否されました。ユーザーが指定されたリソースへのアクセス権を持っていないことを示します。 |
9009 0x2331 |
プログラムは、内部または外部コマンド、操作可能なプログラム、またはバッチファイルとして認識されません。アクションの構成時に、コマンド、アプリケーション名、またはパスのスペルが間違っていることを示します。 |
221225495 0xC0000017 -1073741801 |
十分な仮想メモリが利用できません。 これは、Windowsのメモリが不足していることを示しています。 |
3221225786 0xC000013A -1073741510 |
CTRL + Cの結果としてアプリケーションが終了しました。ユーザーのキーボード入力CTRL + CまたはCTRL + Breakのいずれか、またはコマンドプロンプトウィンドウを閉じることにより、アプリケーションが終了したことを示します。 |
3221225794 0xC0000142 -1073741502 |
アプリケーションは正しく初期化できませんでした。現在のユーザーがアクセス権を持たないデスクトップでアプリケーションが起動されたことを示します。別の考えられる原因は、gdi32.dllまたはuser32.dllのいずれかが初期化に失敗したことです。 |
エラーレベル
環境変数%ERRORLEVEL%には、最後に実行されたプログラムまたはスクリプトの戻りコードが含まれています。
デフォルトでは、ERRORLEVELをチェックする方法は次のコードを使用します。
構文
IF %ERRORLEVEL% NEQ 0 (
DO_Something
)
バッチファイルの最後でコマンドEXIT / B%ERRORLEVEL%を使用して、バッチファイルからエラーコードを返すのが一般的です。
バッチファイルの最後にあるEXIT / Bは、バッチファイルの実行を停止します。
バッチファイルの最後でEXIT / B <exitcodes>を使用して、カスタムリターンコードを返します。
環境変数%ERRORLEVEL%には、バッチファイル内の最新のエラーレベルが含まれています。これは、最後に実行されたコマンドの最新のエラーコードです。バッチファイルでは、定数値の代わりに環境変数を使用することをお勧めします。これは、同じ変数が異なるコンピューターで異なる値に展開されるためです。
バッチファイルからエラーコードをチェックする方法の簡単な例を見てみましょう。
例
次のコードを持つFind.cmdというバッチファイルがあると仮定します。コードでは、lists.txtというファイルが見つからない場合は、エラーレベルを7に設定する必要があることを明確に示しています。同様に、変数userprofileが定義されていない場合は、エラーレベルコードを次のように設定する必要があります。 9.9。
if not exist c:\lists.txt exit 7
if not defined userprofile exit 9
exit 0
最初にFind.cmdを呼び出すApp.cmdという別のファイルがあると仮定します。ここで、Find.cmdがエラーレベルを0より大きい値に設定するエラーを返すと、プログラムを終了します。次のバッチファイルでは、Find.cnd findを呼び出した後、実際にエラーレベルが0より大きいかどうかを確認します。
Call Find.cmd
if errorlevel gtr 0 exit
echo “Successful completion”
出力
上記のプログラムでは、出力として次のシナリオを使用できます。
ファイルc:\ lists.txtが存在しない場合、コンソール出力には何も表示されません。
変数userprofileが存在しない場合、コンソール出力には何も表示されません。
上記の両方の条件に合格すると、コマンドプロンプトに「Successfulcompletion」という文字列が表示されます。
ループ
意思決定の章では、順番に次々に実行されるステートメントを見てきました。さらに、バッチスクリプトで実装を実行して、プログラムのロジックの制御フローを変更することもできます。次に、それらは制御ステートメントのフローに分類されます。
S.No | ループと説明 |
---|---|
1 | ステートメントの実装中
バッチスクリプトで使用できる直接のwhileステートメントはありませんが、ifステートメントとラベルを使用することでこのループの実装を非常に簡単に行うことができます。 |
2 | ステートメントの場合-実装のリスト
「FOR」コンストラクトは、バッチファイルのループ機能を提供します。以下は、値のリストを操作するための「for」ステートメントの一般的な構成です。 |
3 | 範囲をループする
'for'ステートメントには、値の範囲を移動する機能もあります。以下は、ステートメントの一般的な形式です。 |
4 | クラシックforループ実装
以下は、ほとんどのプログラミング言語で使用できる古典的な「for」ステートメントです。 |
コマンドライン引数のループ
'for'ステートメントは、コマンドライン引数のチェックにも使用できます。次の例は、「for」ステートメントを使用してコマンドライン引数をループする方法を示しています。
例
@ECHO OFF
:Loop
IF "%1"=="" GOTO completed
FOR %%F IN (%1) DO echo %%F
SHIFT
GOTO Loop
:completed
出力
上記のコードがTest.batというファイルに保存されていると仮定しましょう。上記のコマンドは、バッチファイルがコマンドライン引数1、2、および3をTest.bat 1 2 3として渡すと、次の出力を生成します。
1
2
3
S.No | ループと説明 |
---|---|
1 | BreakStatementの実装
breakステートメントは、任意のプログラミング言語内のループ内の制御フローを変更するために使用されます。breakステートメントは通常、ループ構造で使用され、最も内側の囲んでいるループを即座に終了させるために使用されます。 |