0

**バッチ ファイル **コマンド ライン パラメーターを受け取り、パラメーターが一致した場合に何らかの処理を行うバッチ ファイルを作成しています。ただし、新しいパラメーターを使用してバッチ ファイルを再度実行すると、ファイルは引き続き古いパラメーターで実行されます。

  1. 最初の実行: file.bat -name hello -w 400 -r 320

  2. 2 回目の実行: file.bat -name hello -w 400。

ファイルの 2 回目の実行を行うと、最初の実行が実行されます。つまり、最初の実行のパラメーターが引き続き考慮されます。なぜこれが事実なのか誰か知っていますか?

前もって感謝します。

バッチファイルのコードを掲載していないことをお詫び申し上げます。以下はコードです。

set filename= 
set rate=
set hidden=
set rate=
:recheck 
if  "%1"=="-help"  goto :help
if  "%1"=="-name"  goto :filename
if  "%1"=="-h"     goto :hidden 
if  "%1"=="-w"     goto :weight 
if  "%1"=="-r"     goto :rate 
if  "%~1"==""      goto :endofcommandline
:filename 
shift 
set filename =%1
shift   
goto :recheck

ファイルの他の部分については、変数「filename」を使用して他のことを行います。また、ファイルの先頭と末尾で setlocal と endlocal を使用します。各ifステートメントに対応する他のラベルがあり、ユーザーから渡された値がある場合は、異なる変数を値に設定します。変数の値を出力しようとすると、エコーがオフになることもあります。上記のように、使用するすべての変数はファイルの先頭でクリアされます。

4

1 に答える 1

1

ここにはいくつかのポイントがあります。

「また、ファイルの最初と最後で setlocal と endlocal を使用します。」

「私が使用するすべての変数は、上記のようにファイルの先頭でクリアされます。」

Setlocal コマンドは変数をクリアせず、現在の変数を事後変更から保持します。これは、以前のバッチ ファイルの実行で、または入力された SET コマンドを使用して、ファイル名変数が定義されていた場合、その値が削除または変更されるまでそのままであることを意味します。

「わかりました!」、「filename 変数はバッチ ファイルの 2 回目の実行時に変更されますよね?」

いいえ...次の行:

set filename =%1

"filename" 変数は変更しませんが、代わりに "filename " (ファイル名とスペース) を変更します。これを試して:

set filename=No space
echo %filename%
set filename =Bad name with trailing space
echo %filename %
echo %filename%

この種のエラーを回避するには、プログラムを注意深くチェックする必要があります。

于 2012-04-27T00:55:22.313 に答える