バッチスクリプト-リターンコード

デフォルトでは、コマンドラインの実行が完了すると、実行が成功した場合はゼロを返し、実行が失敗した場合はゼロ以外を返します。実行が失敗した後にバッチスクリプトがゼロ以外の値を返す場合、ゼロ以外の値はエラー番号を示します。次に、エラー番号を使用してエラーの内容を判別し、それに応じて解決します。

以下は、一般的な終了コードとその説明です。

エラーコード 説明
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ステートメントは通常、ループ構造で使用され、最も内側の囲んでいるループを即座に終了させるために使用されます。