0

次のような Windows バッチ ファイルを見ました。

..
::Handle the case where the install dir is specified as a drive
if not "%1" == "" if /I "%1" == "%~d1" set INSTALL_DIR=%~d1
..

質問 1: 2 つの IF ステートメントがこのように一緒に使用されているのを見たことがありません。AND のように動作しますか?

質問 2: %1 がドライブの場合のみ INSTALL_DIR を設定するようです。しかし、次の 1 つのチェックだけで十分ではありませんか?

if /I "%1" == "%~d1" set INSTALL_DIR=%~d1
4

2 に答える 2

2

2ifが一緒に使用されているという事実は、実際には大きな違いはありません。最初のコマンドが成功した場合に実行するコマンドが別のifステートメントになっているだけです。

はい、 2 にはロジックifとして同等の機能があります。AND

単一のチェックで十分なようですが、バッチで特定のエラー メッセージが表示されない場合に限ります。

たとえば、パラメータが指定されていない場合、これを明示的にチェックして、パラメータがないことを示すエラー メッセージを表示することができます。次に、ドライブではなくドライブがある場合は、別のエラー メッセージを表示します。

お役に立てれば。

于 2012-10-12T07:45:22.550 に答える
0

質問 1 : このように IF のネストを行う方が簡単であることがわかる場合があります (読みやすくするため)。

..
::Handle the case where the install dir is specified as a drive
if not "%1" == "" ( 
if /I "%1" == "%~d1" ( 
set INSTALL_DIR=%~d1
)
)
..

これにより、「if」インスタンスで複数のコマンドをネストすることもできます。例えば:

..
::Handle the case where the install dir is specified as a drive
if not "%1" == "" ( 
echo Parameter 1 is not empty
if /I "%1" == "%~d1" ( 
echo Parameter 1 is a drive so setting the variable
set INSTALL_DIR=%~d1
)
)
..

質問 2 : あなたの例では、テストではパラメーターがドライブまたはパス (ドライブを含む) のいずれかである必要があり、パラメーターをドライブのみにフィルター処理します。

それは十分ですか?それは、次のような追加のチェックを行う必要があるかどうかによって異なります。

  • ドライブが存在する場合
  • ドライブがローカル ハードディスクの場合

あなたが持っているチェックが十分であるかどうかは、本当にあなた次第であり、あなたのコードがどの程度堅牢である必要があるか、%1 で使用されるものをどの程度制御できるかはあなた次第です。

于 2012-10-13T03:46:08.717 に答える