web-dev-qa-db-ja.com

batファイル/の条件とbatの演算子の複数をチェックします

私はこのようなものが欲しいです:-if %ERRORLEVEL% GEQ 1 && %ERRORLEVEL% neq 255 GOTO Not closed by user。しかし、この構文は機能していません。

2
Deb

これはどうですか? XP以上が必要です、もちろん...

if %errorlevel% GEQ 1 (
  if %errorlevel% NEQ 255 goto :NotClosed
  ::other statements go here, if you need 'em
  ::don't forget to close the parenthesis on the last statement ->)

さらに明確にするために:

if %errorlevel% EQU 0 (
  ::commands you want to perform if 0 go here. Notice ->) 
else (
  ::We got here because errorlevel was GEQ 1 or less than one...watch out
  ::if you program returns negative errorlevels!
  if %errorlevel% NEQ 255 goto :NotClosed
  ::other statements go here. But don't forget the parenthesis ->)
3
JSanchez

完全を期すために、ここに JPSoftwareのTCC/LE (このようなスクリプトも実行できるコマンドインタープリター)の回答があります。これは、下位互換性のためにJSanchezの回答の構文をサポートしますが、2つのより良い選択肢もあります。独自のもの。

選択肢は…

…独自の複数行のiffコマンド

iff %ERRORLEVEL% GE 1 then
  iff %ERRORLEVEL% NE 255 then
     goto :NotClosedByUser
  endiff
endiff

iffを使用すると、括弧で囲まれた複合コマンドの場合のように、変数の展開が「早すぎる」場合に発生するという警告はありません。

…論理演算子を使用した複合式

if %ERRORLEVEL% GE 1 .and. %ERRORLEVEL% NE 255 goto NotClosedByUser

これには、質問で必要なものとほぼ同じであるという利点があります。 TCCは、互換性のためにGEQNEQもサポートしています。はい、gotoコマンドにコロンは必要ありません。

参考文献

  • JPソフトウェア。 [〜#〜] iff [〜#〜] 。コマンド/ TCCヘルプを取得します。
  • JPソフトウェア。 条件式 。コマンド/ TCCヘルプを取得します。
1
JdeBP