5

私のWindowsバッチファイルには、さまざまな数の文字列を持つ変数があります。例:

set string="-start" "-end someOption" 

文字列の数は次のように数えます。

Set count=0
For %%j in (%string%) Do Set /A count+=1
echo.Total count: %count%

出力は次のようになります。

Total count: 2

ここで、変数に文字列が含まれている回数だけアプリケーションを起動し、アプリケーションに現在の文字列をパラメーターとして指定します。私はこれを試しました:

 FOR /L %%H IN (1,1,%COUNT%) DO ( 

    echo %%H
        FOR /F "tokens=%%H " %%I IN ("%string%") Do (
            echo %%I
            rem java -jar app.jar %%I
        )
    )

しかし、残念ながらこれは機能しません。それが出力です。

現在の文字列の数:1 "%H" "kann syntaktisch an dieser Stelle nicht verarbeitet werden。(%H" "はこの場所では構文的に使用できません)現在の文字列の数:2"%H "" kann syntaktisch a dieser Stelle nichtverarbeitetwerden。

変数「string」の2つの文字列をループするにはどうすればよいですか?

4

2 に答える 2

6

のオプションフィールドでFORパラメータや遅延拡張変数を使用することはできませんFOR/F
ただし、関数を作成して、そこでパーセント拡張を使用することはできます。

分割はデリム文字の効果であり、デフォルトのスペースとタブごとに行われ、引用符で囲まれたパラメーターでも機能します。
だから私はあなたの区切り文字をセミコロンに変更しました、そしてそれはうまくいきます。

set string="-start";"-end someOption" 
set count=0
For %%j in (%string%) Do Set /A count+=1
echo.Total count: %count%

FOR /L %%H IN (1,1,%COUNT%) DO ( 

    echo %%H
    call :myFunc %%H
)
exit /b
:myFunc
FOR /F "tokens=%1 delims=;" %%I IN ("%string%") Do (
  echo %%~I
  rem java -jar app.jar %%I
)
exit /b
于 2012-08-22T12:13:59.437 に答える
0

わかりました、もっと明確にしようと思います。

上記の答えは私を少し助けてくれました。

質問の冒頭で示したように、次の変数があります。

set string="-start" "-end someOption" 

この変数をループして、最後に2つの完全なパラメーターを取得したかったのです。最初のパラメーターは次のとおりです。

"-start"

二つ目:

"-end someOption"

しかし、関数を呼び出した後のエコーは次のとおりです。

"-start" 

(これは正しいです)そして

"-end

/これは間違っています。彼は空白で文字列をスリットしているからです。

しかし、アプリケーションを起動するための最後に、2つの正しいパラメーターが必要です。それらは次のようになります。最初のパラメータ:

-start

1つのオプションを持つ2番目のパラメーター:

-end someoption

したがって、引用符を削除する必要があり、2番目のパラメータをホワイトマークで分割してはなりません。

于 2012-08-22T13:35:19.430 に答える