【bat】errorlevelの使い方を教えます。条件分岐する事も可能!

您所在的位置:网站首页 批处理for循环中errorlevel 【bat】errorlevelの使い方を教えます。条件分岐する事も可能!

【bat】errorlevelの使い方を教えます。条件分岐する事も可能!

2024-07-17 22:59| 来源: 网络整理| 查看: 265

batファイルで「errorlevel」の基本的な使い方を教えます。

errorlevelにはどのような値が入っているのか、わからなくなってしまったりした経験はないでしょうか?

そのような人の為に分かりやすく実践を行っています。

応用編として「if」と「errorlevel」を併用して場合分けをするやり方も実践を踏まえ教えます。

また操作者の選択で処理を場合分けする方法や「errorlevel」の値を自由に変更するやり方まで教えます。

それぞれで実演を踏まえていますし、出そうなエラーも例を出して紹介しているので必ずあなたのものに出来ます。

windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。

あまり使うイメージのない「errorlevel」コマンドですが、この記事を読み終えた頃には「errorlevel」を使いこなして色々な事が出来るようになっています。

この記事を読んでできる事 batファイルでerrorlevelの基礎がわかる errorlevelを使用して場合分けが出来る(操作者の選択にも対応) errorlevelに自分の思う数字を入れる事が出来る errorlevelを使用して出るエラーに対応できる 目次batファイルでのerrorlevelの使い方 エラーレベル

batファイルで「errorlevel」の基本的な使い方として、前のコマンドが正常終了したか確認する事が出来ます。

前のコマンドが成功したか失敗したかで、後の処理を変更したいといった場面はないでしょうか?

そんな時に使用できるのが「errorlevel」です。

つまりbatファイルで「errorlevel」を自分のモノにできれば、batファイルで出来る事が増え職場でも注目のエンジニアになれるかもしれません。

という事で、まずはbatファイルの「errorlevel」の基礎から学んで行きましょう!

「errorlevel」の基本は以下の3つです。

batファイルでのerrorlevel基礎 直前のコマンドが成功した場合はerrorlevel変数に「0」を入れる 直前のコマンドが失敗した場合はerrorlevel変数に「1」を入れる コマンド自体がない場合はerrorlevel変数に「9009」を入れる

errorlevelのように変数を扱うとバッチファイルで様々な事が出来ます。具体的には下の記事にまとめています。

あわせて読みたい 【bat】バッチファイルで変数や環境変数の使い方!エラー対処法あり バッチファイルで変数や環境変数を設定するやり方を教えます。 その他にも変数に関わる事をご紹介します。 この記事でわかる事 変数を指定する時の注意点など 計算結果…

その他の「errorlevel」の値は以下を参照ください。

errorlevel意味2アクセス拒否基本以外のerrorlevel値の説明

では実践で「errorlevel」の基本の動きを見ていきます。

batファイルでのerrorlevelチェック:成功判定

まずはコマンドを成功させて「errorlevel」変数に「0」が入る事を確認していきます。

下のような成功判定のbatファイルを作成してみます。

@echo off echo ファイルがなければ作成、あってもなくてもコマンドは成功するので:エラーレベル0 if not exist test1.txt ( echo テキストの中身 > test1.txt ) echo エラーレベル=%errorlevel% pause errorlevelチェック:成功判定のbatファイル説明

1行目の「@echo off」はbatファイルに記述したコマンドを表示させないコードです。

あわせて読みたい 【bat基礎】バッチで「@echo off」の意味や効果とは? batファイルの初めに「@echo off」という記載があると思いますが、この意味は何でしょうか? なんの効果があるのでしょうか?「@echo off」が無ければどうなるのでしょ…

batファイルの3行目は説明になります。

batファイルでechoコマンドに関しては、下の記事を参考にしてください。

あわせて読みたい 【bat基礎】バッチファイルのechoで文字列表示する!エラー対処法あり batファイルで「echo」の使い方を今回は行います。 「echo」コマンドは指定の文字列を標準出力に表示する事が出来るコマンドです。 ただ文字列を表示するだけでなく、フ…

①4~6行目はifを使用して「test1.txt」ファイルが無ければファイルを作成するコマンドです。

あわせて読みたい 【bat基礎】ファイル存在チェックする方法!existsを使用します! batを使用していてファイル存在チェックしたい場合のやり方をご紹介します。existsを使用します。 もしファイルが存在したら〇〇、存在しなければ作成するといった場合… あわせて読みたい 【bat基礎】バッチでファイルを簡単に作成する方法!全3種類ご紹介 batファイルでファイルを作成する方法をお伝えします。 ファイルを何個も作成する場合に、batで行えば楽に業務を遂行する事が可能です。 【batでファイルを簡単に作成す…

②batファイルの7行目でエラーレベルを表示しています。「%」で囲む事で変数を展開出来ます。

最後の行でbatファイルを一時停止しています。理由はbatファイルの実行結果を見る為です。

あわせて読みたい 【bat基礎】バッチでPAUSEを使用して一時停止する!waitはありません バッチファイルを使用していて、途中で止めたいところで一時停止したい場合ないでしょうか? そんな時バッチファイルでは「PAUSE」を使用します。 PAUSEの実用例を現役…

3行目の説明でも書いていますが、なければ作成あれば何もしないコマンドなので必ず成功します。

「errorlevel」が「0」になれば成功です。では先程のbatファイルを実行して見ます。

あわせて読みたい 【bat】バッチを実行する方法!実行できない時の対処法などをご紹介 batファイルが既にありそれを実行してと言われたけど、どうやって実行すればわからない人の悩みに答えます。 またbatを実行しようとしたけど、できなかった時の原因と対… errorlevelチェック:成功判定のbat実行と結果 ファイルがなければ作成、あってもなくてもコマンドは成功するので:エラーレベル0 エラーレベル=0

「errorlevel」に「0」が入っている事がわかります。

batファイルでのerrorlevelチェック:失敗判定

次にコマンドを失敗させて「errorlevel」変数に「1」が入る事を確認していきます。

下のような失敗判定のbatファイルを作成してみます。

@echo off echo 存在しないフォルダに移動しようとすると失敗:エラーレベル1 cd 3333 echo エラーレベル=%errorlevel% pause errorlevelチェック:失敗判定のbatファイル説明

batファイルの4行目で存在しない適当な「3333」フォルダに移動しようとするコマンドです。

当然ながらカレントフォルダにそんなフォルダは存在しないのでエラーとなります。

errorlevelが「1」になれば成功です。では先程のbatファイルを実行して見ます。

errorlevelチェック:失敗判定のbat実行と結果 存在しないフォルダに移動しようとすると失敗:エラーレベル1 指定されたパスが見つかりません。 エラーレベル=1

「指定されたパスが見つかりません」というメッセージが出て、フォルダ移動できなかったので「errorlevel」に「1」が入っています。

batファイルでのerrorlevelチェック:コマンドがない場合の値

最後に存在しないコマンドを指定して、判定できない状態にして「errorlevel」変数に「9009」が入る事を確認していきます。

下のような成功判定も失敗判定も出来ないbatファイルを作成してみます。

@echo off echo ないコマンドを投入:エラーレベル9009 copyy echo エラーレベル=%errorlevel% pause errorlevelチェック:コマンドがない場合のbatファイル説明

batファイルの4行目で「copy」コマンドの記入ミスの「copyy」を指定します。

そんなコマンドはないので判定のしようがありません。こんな時は「errorlevel」変数には「9009」が入ります。

「errorlevel」が「9009」になれば成功です。では先程のbatファイルを実行して見ます。

errorlevelチェック:コマンドがない場合のbat実行と結果 ないコマンドを投入:エラーレベル9009 'copyy' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 エラーレベル=9009

「copyy」は認識されていません。となり、「errorlevel」変数に「9009」が入っている事がわかります。

ここまでがbatファイルでの「errorlevel」の基礎になります。

errorlevelとifとのコラボで条件分岐 スクリプト

では応用編として実際に業務でも使用できるbatファイルを紹介します。

errorlevelとifを使用して条件分岐してみます。

下のようなif文とerrorlevelを使用したbatファイルを作成してみます。

@echo off REM errorlevelとifで条件分岐する if %errorlevel% equ 0 ( echo エラーレベル0の時の処理 ) else if %errorlevel% equ 1 ( echo エラーレベル1の時の処理 ) else if %errorlevel% equ 9009 ( echo エラーレベル9009の時の処理 ) else ( echo エラーレベルは%errorlevel%です。 ) pause

REMはbatファイルでコメントアウトするコマンドです。

あわせて読みたい 【bat基礎】remの意味と使い方を教えます!初心者向けの記事になります! batファイルでremという文字を見かけるけど、どういった意味があるのでしょうか? どのような時に使用するのでしょうか?使い方は? といった疑問の声がありましたので…

REM以外のコメントアウト方法や推奨コメントアウト方法については以下の記事を参照!

あわせて読みたい 【bat基礎】バッチファイルでコメントアウトする方法!【エラー対処法有り】 batファイルでコメントアウトしたい場合の方法を記入します。 スクリプトを作成する上でコメントアウトは大事ですよね。後から見たら何をしているのかわからなくなった… errorlevelとifとのコラボbatファイル説明

①batファイルの3行目で「if」を使用して「errorlevel」が0の時の条件分岐をしています。

ifコマンドの詳しい説明は以下の記事を参照してください。

あわせて読みたい 【bat】if文を詳しく説明します。複数条件や数値、文字列の比較まで batファイルで条件分岐したい時には「if」構文を使用します。今回はifを使い方をまとめます。 batファイルに限らずプログラミングの条件分岐で処理を変える事は、業務を…

「equ」とは「equal」で等しいという意味の比較演算子です。

比較演算子説明英文equ等しいequalneq等しくないnot equalgeq以上greater than or equalleq以下less than or equalgtrより大きいgreater thanlssより小さいless thanbatファイルのifでの比較演算子まとめ表

②4行目で「errorlevel」が「0」の時の処理を記入します。

③5行目で「else if」と比較演算子を使用して、更に条件分岐させています。「errorlevel」が「1」の時の条件分岐です。

④7行目も同様に条件分岐行います。「errorlevel」が「9009」の時の条件分岐です。

⑤9行目で「else」を使用して、どの条件にも当てはまらない時の分岐を指示しています。

これで直前でのコマンド結果の「errorlevel」の値に即した処理を行う事が出来ます。

batファイルでerrorlevelとifを使用した時の注意点

errorlevelとifを使用した時のよくあるエラーとしてスペースがあります。

@echo off REM errorlevelとifで条件分岐する if %errorlevel% equ 0( echo エラーレベル0の時の処理 ) else if %errorlevel% equ 1( echo エラーレベル1の時の処理 ) else if %errorlevel% equ 9009( echo エラーレベル9009の時の処理 ) else ( echo エラーレベルは%errorlevel%です。 ) pause

先程のbatファイルと同じに見えますが、上のbatファイルを実行して見て下さい。

動かないです。batファイルのエラーです。エラーの理由は比較している値の後にスペースがありません。

このようにスペースがないとエラーになります。スペースはわかりにくいので注意してください。

batファイルでerrorlevelとChoiceを組み合わせる使い方 choice

先程のbatファイルではerrorlevelに入る値によって条件分岐しました。

今回はユーザーが入力する値によって条件分岐して見ます。

下のようなchoice文とif文とerrorlevelを使用したbatファイルを作成してみます。

@echo off REM errorlevelとifで条件分岐する choice /c xyz /t 30 /d z /m 'xyzから選択してください(タイムアウトは30秒デフォルトではz)' if %errorlevel% == 1 ( echo 選んだのは1番目 ) else if %errorlevel% == 2 ( echo 選んだのは2番目 ) else if %errorlevel% == 3 ( echo 選んだのは3番目 ) pause errorlevelとifでユーザーの選択肢により条件分岐するbatファイル説明

①ここではchoiceコマンドを使用します。choiceコマンドは選択肢を提示してユーザーに選ばせます。

choiceコマンドのオプションは以下にまとめています。

オプション意味/c 選択肢選択肢を指定する/t タイムアウト値ユーザーのアクションを待つ時間指定/d 選択肢指定しなかった場合のデフォルト値/m ‘メッセージ’プロンプトに表示するメッセージ指定/cs大文字と小文字を区別するchoiceコマンドのオプション

上のオプションからもわかるように、今回のchoiceコマンドで「x」,「y」,「z」から選ばせる。30秒経過すると自動的に「z」が選択される。

②選択したものの番号が「errorlevel」に代入されます。今回でいうと「x」を選択すれば「errorlevel」に「1」が代入、「y」であれば「2」を、「z」であれば「3」が代入されます。

この仕組みが理解できればifとerrorlevelと比較演算子を使用してユーザーが入力した値による条件分岐が作成できます。

batファイルでerrorlevelに値を入れる 値を入れる

次に「errorlevel」に自分の好きな値を入れてみましょう。

これはサブルーチンで行います。

以下のbatファイルを作成してみます。

@echo off REM サブルーチンでerrorlevelに好きな値を入れる call :subr echo 指定した値がエラーレベルに入っていればエラーレベルは777 echo エラーレベル=%errorlevel% pause :subr echo サブルーチンの中のエラーレベルは%errorlevel% exit /b 777 サブルーチンでerrorlevelに好きな値を入れるbatファイルの説明

サブルーチンとはcallで指定した箇所に飛びます。exitで元の場所に戻ります。その時に「/b」オプションで「errorlevel」を指定可能です。

①上のbatファイルでは3行目でサブルーチンの7行目へ飛びます。8行目で「errorlevel」の値を表示しています。現在の値は何もしていないので0になります。

②最後の行で戻り値の「777」を「errorlevel」に代入して4行目に戻ります。

③5行目で「errorlevel」が「777」になっているか確認しています。

④6行目で「pause」を使用してコマンドの結果を見れるようにしています。

batファイルを実行 サブルーチンの中のエラーレベルは0 指定した値がエラーレベルに入っていればエラーレベルは777 エラーレベル=777

想定通りエラーレベルが指定した「777」になっている事が確認できます。

サブルーチンでerrorlevelに好きな値を入れる時の注意点

今回のサブルーチンを使用する時の注意点としては、サブルーチンをbatファイルの一番下に持っていくということです。

下のbatファイルを見て下さい。

@echo off REM サブルーチンでerrorlevelに好きな値を入れる call :subr echo 指定した値がエラーレベルに入っていればエラーレベルは777 echo エラーレベル=%errorlevel% :subr echo サブルーチンの中のエラーレベルは%errorlevel% exit /b 777 pause サブルーチンを使用してエラーが出るbatファイルの説明

先程のbatファイルの「pause」が一番下にきています。サブルーチンは「:subr」から「exit /b 777」までです。その下にメインのコマンドが記述されています。

このエラーbatファイルを実行してみますが、実行できません。

サブルーチンは一番下に記述してください。

batで変数「errorlevel」に直接値をいれると値が固定される

「errorlevel」に好きな値を入れる時に注意しなければいけない事がもうひとつあります。

batファイルで変数に値を入れる時のデフォルトは以下になります。

set 変数名=値

これで「errorlevel」に好きな値を入れれば早いのではないか?と思った人もいるかもしれません

結果は代入できるが、それ以降値が変わらないが正解です。

下のsetでerrorlevelに好きな値を入れたbatファイルをみてください。

@echo off REM setでerrorlevelに好きな値を入れる set errorlevel=99 choice /c xyz /t 30 /d z /m 'xyzから選択してください(タイムアウトは30秒デフォルトではz)' if %errorlevel% == 1 ( echo 選んだのは1番目 ) else if %errorlevel% == 2 ( echo 選んだのは2番目 ) else if %errorlevel% == 3 ( echo 選んだのは3番目 ) echo エラーレベル=%errorlevel% pause batで変数「errorlevel」に直接値をいれるbatファイルの説明

3行目でsetにより変数「errorlevel」に「99」を入れています。

4行目から11行目までは先程「batファイルでerrorlevelとChoiceを組み合わせる使い方」の見出しで行ったbatをそのまま使用しています。ユーザーが入れたものに紐づいた値が「errorlevel」に代入されるのでしたね。

13行目で最終の「errorlevel」の値を表示しています。

batファイル実行

このsetでerrorlevelに好きな値を入れたbatファイルを実行して「x」を指定してみます。

結果は「errorlevel」が「x」に対応する「1」になればOKです。

'xyzから選択してください(タイムアウトは30秒デフォルトではz)' [X,Y,Z]?X エラーレベル=99

エラーレベルが3行目で指定した「99」のままです。なので失敗です。

原因はsetは環境変数へ値を指定するので、そのbatファイルが終わるまではsetで指定した値から変わらないからです。

解決法は「サブルーチンでerrorlevelに好きな値を入れるbatファイル」項目を参考にしてください。

batファイルでerrorlevelの使い方のまとめ スクリプト

batファイルで「errorlevel」の基本的な使い方として、前のコマンドが正常終了したか確認する事が出来る。

「errorlevel」の基本は以下の3つです。

batファイルでのerrorlevel基礎 直前のコマンドが成功した場合はerrorlevel変数に「0」を入れる 直前のコマンドが失敗した場合はerrorlevel変数に「1」を入れる コマンド自体がない場合はerrorlevel変数に「9009」を入れる errorlevelとifとのコラボで条件分岐するbatファイル例 @echo off REM errorlevelとifで条件分岐する if %errorlevel% equ 0 ( echo エラーレベル0の時の処理 ) else if %errorlevel% equ 1 ( echo エラーレベル1の時の処理 ) else if %errorlevel% equ 9009 ( echo エラーレベル9009の時の処理 ) else ( echo エラーレベルは%errorlevel%です。 ) pause

注意点としては条件と「(」との間にスペースを忘れない事でした。

errorlevelとChoiceを組み合わせるbatファイル例 @echo off REM errorlevelとifで条件分岐する choice /c xyz /t 30 /d z /m 'xyzから選択してください(タイムアウトは30秒デフォルトではz)' if %errorlevel% == 1 ( echo 選んだのは1番目 ) else if %errorlevel% == 2 ( echo 選んだのは2番目 ) else if %errorlevel% == 3 ( echo 選んだのは3番目 ) pause

choiceコマンドのオプションは以下でした。

オプション意味/c 選択肢選択肢を指定する/t タイムアウト値ユーザーのアクションを待つ時間指定/d 選択肢指定しなかった場合のデフォルト値/m ‘メッセージ’プロンプトに表示するメッセージ指定/cs大文字と小文字を区別するchoiceコマンドのオプション errorlevelに好きな値を入れるbatファイル例 @echo off REM サブルーチンでerrorlevelに好きな値を入れる call :subr echo 指定した値がエラーレベルに入っていればエラーレベルは777 echo エラーレベル=%errorlevel% pause :subr echo サブルーチンの中のエラーレベルは%errorlevel% exit /b 777

注意点はサブルーチンは最後に記入する(exitの後にはコマンドを書かない)

「set」コマンドで「errorlevel」に直接値をいれたらそれ以降は値は変更できない



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3