2012-05-04 16 views
2

私が作成しているバッチファイルの中に単純なFORループがあり、期待通りの動作をしていません。 FORループはテキストファイルの行を繰り返し処理し、各繰り返しでIF文を使用して現在の行を簡単に比較し、真と評価されればいくつかの作業を行います。ここでは、コードは次のようになります。Windowsのバッチファイル内のFORループ内のIF文でカウンタがインクリメントされない

SETLOCAL ENABLEDELAYEDEXPANSION 
set /a sitecounts=1 
set /a input=34 
FOR /F "tokens=1,2 delims=^/" %%G IN (file.txt) DO (
IF %sitecounts% == %input% (set /a selectedsitepath=%logfilepath%W3SVC%%H) 
set /a sitecounts=!sitecounts!+1 
echo !sitecounts! 
) 

私は(私は最後の文で、カウントをエコーすることによってこれを証明するsitecounts変数(私のカウンタ)は、実際には各ループで正しくインクリメントし、奇妙な問題に実行していますよ) - 次の反復時には%% sitecounts%はまだ初期値である '1'の値を示しています。

私は、コードを変更する場合:

IF !sitecounts! == ... 

...その後、IF文は、純粋なテキストとしてその値を扱うように見えます!私はENABLEDELAYEDEXPANSIONをループ内の変数を扱うように設定しましたが、次に何をすべきかはわかりません。どんな助けもありがとう!

+0

PowerShellを学ぶ価値があるかもしれません。 WindowsのBATファイルは非常に限られています。 –

+0

powershellは学習価値があるかもしれませんが、Windowsバッチスクリプトは簡単にこのタスクに対応します。 – RobW

答えて

2

私は実際にそれをテストした。この時間は....

変更

IF !sitecounts! == %input% (set selectedsitepath=%logfilepath%W3SVC%%H) 
  • %sitecounts%にライン

    IF %sitecounts% == %input% (set /a selectedsitepath=%logfilepath%W3SVC%%H) 
    

  • を評価されるためには !sitecounts!する必要があります
  • それは数式ないのでset /a selectedsitepath=%logfilepath%W3SVC%%Hが動作しない:

    /スイッチは、等号 の右側に文字列が評価される数式であることを指定します。

    ジャストスイッチ(/pが仕事に行くしないでもない、それはプロンプトです)

0

はおそらくエラーは、この行にある省略

IF %sitecounts% == %input% (set /a selectedsitepath=%logfilepath%W3SVC%%H) 

あなたがを設定しています文字列数値式(set/a)でない場合は

に変更してください
IF !sitecounts! == %input% (set selectedsitepath=%logfilepath%W3SVC%%H) 
^  ^    ^
+0

はい、スイッチが原因ですが、 '/ p 'で置き換えることは解決策ではありません:_Pスイッチを使用すると、変数の値をユーザが入力した入力行の 行に設定できます。変数を文字列値に設定すると、スイッチは必要ありません。 – marapet

+0

@ marapet right、ちょうどset helpの/ a/pを見て、/ pが文字列であると思った。回答を更新しました – Steve

関連する問題