3

作成しているバッチファイル内に単純なFORループがありますが、期待どおりに機能していません。FORループはテキストファイルの行を反復処理し、反復ごとにIFステートメントを使用して現在の行をすばやく比較し、trueと評価された場合にいくつかの作業を行います。コードは次のとおりです。

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ステートメントはその値を純粋なTEXTとして扱うように見えます!ループ内の変数を処理するようにENABLEDELAYEDEXPANSIONを設定しましたが、次に何をすべきかわかりません。どんな助けでも大歓迎です!

4

2 に答える 2

2

今回は実際にテストしました…。

行を変更します

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

の中へ

IF !sitecounts! == %input% (set selectedsitepath=%logfilepath%W3SVC%%H)
  • %sitecounts%!sitecounts!評価されるためにある必要があります
  • set /a selectedsitepath=%logfilepath%W3SVC%%H数式ではないため、機能しません。

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

    スイッチを省略するだけです(/p どちらも機能しません。プロンプト用です)

于 2012-05-04T20:06:42.983 に答える
0

おそらくエラーはこの行にあります

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

数式ではなく文字列を設定し(/ aを設定)、次のように変更します。

IF !sitecounts! == %input% (set   selectedsitepath=%logfilepath%W3SVC%%H)
   ^          ^                 ^
于 2012-05-04T20:39:23.703 に答える