2

私のバッチファイルには、次の変数があります。

set collection=collection1
set environment=oracleDev
set processChain1=-help,-startimport %environment% %collection% 

ご覧のとおり、私のプロセス チェーンには、「,」で区切られた 2 つの文字列が含まれています。

ここで、2 つの文字列を数えたいと思います (後で複数の文字列になる可能性があります)。私はそれを試しました:

Set count=0
For %%j in (%%processChain1%%) Do Set /A count+=1
echo %count%

しかし、最初の間違いがあります。2 ではなく 1 が出力されます。なぜですか?

文字列を数えた後、各パラメーター (変数 processChain1 の文字列) でアプリケーションを開始したいので、次のように試します。

FOR /L %%G IN (1,1,%count%) DO (
     FOR /F "tokens=%count% delims=," %%H IN ("%processChain1%") DO java -jar App.jar %%H
)

最初の間違いのためにカウンターが間違っているため、これは正しく機能しません。しかし、最初の問題を解決できれば、2番目の問題はうまくいくはずです。これは正しいです?

4

2 に答える 2

1

私が知る限り、そのvarには文字列が1つしかないため、現在は1を数えています。後で分割しますが、トークン数はすでに1に設定されています....

最初の文字列 (delims=,) を分割し、2 番目の部分で各結果を処理する必要があります。

編集済み

これを試して...

@echo off
set collection=collection1
set environment=oracleDev
set processChain1="-help" "-startimport %environment% %collection%"

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

ご覧のとおり、var processChain1構造を変更して、値をスペース (デフォルトの区切り文字) で区切り、すべての var を引用符で囲みます... 少なくとも機能し、合計カウントが得られます。

もちろん、このように使用できる場合に限ります。

それが役に立てば幸い。乾杯。

そうでない場合は、こちらをご覧ください。おそらく助けになるでしょう:バッチファイル内の個別のトークン

幸運を


EDITED 2 (新しい情報に合わせて)

バッチ ファイル: Metalhead89.bat

@echo off
:: define the vars
set collection=collection1
set environment=oracleDev
:: concatenate the vars with ++
set processChain1=-help -startimport++%environment%++%collection%

:: Get the total count plus, run each token found
Set count=0
For %%j in (%processChain1%) do (
    Set /A count+=1
    set line=%%j
    call :processToken
)
:: This will be printed out, at the end of the loop
echo Total token count: %count%
goto :eof

:processToken
for /f %%f in ("%line%") do (
:: set the command var with your exe file for each token found
    set command=Running command: java -jar app.jar %%f
    call :runTheCommand
)
goto :eof

:runTheCommand
:: now we replace the doble ++ in the var string with space, to treat them as options
    set str=%command%
    set str=%str:++= %
:: finally we do a echo of the command with the option included
    echo %str%
goto :eof

ここで、コマンドラインからそのファイルを呼び出すと、次のようになります。

Z:\>call Metalhead89.bat
Running command: java -jar app.jar -help
Running command: java -jar app.jar -startimport oracleDev collection1
Total token count: 2

幸運の相棒;-)

于 2012-08-22T08:38:15.923 に答える
0

ここで私の解決策を紹介しますが、gmo の解決策は少なくとも私のものと同じくらい優れています。

@echo off

rem !!!!!!!!!!!!!!!!!!!!!
rem Set Parameter options
rem !!!!!!!!!!!!!!!!!!!!!

set collection=collection1
set environment=oracleDev

rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
rem Set Modules As Parameters
rem Watch out: Each module + his options has to be in quotation marks
rem     Options are separated by comma without whitespaces
rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

set helpModul="-help"
set importModul="-startimport,%environment%,%collection%"

rem !!!!!!!!!!!!!!!!!!!!!!!
rem Configure Process Chain
rem !!!!!!!!!!!!!!!!!!!!!!!

set activeProcessChain=%helpModule%,%importModul%

rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
rem Start Content Integration Testing Framework
rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Set count=0
For %%j in (%activeProcessChain%) Do Set /A count+=1


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

    call :loopThroughParams %%H
)
exit /b


:loopThroughParams
FOR /F "tokens=%1 delims=," %%I IN ("%activeProcessChain%") Do (

    echo.
    echo.
    java -jar %nameOfApplication% %%~I   
)
exit /b

:end
于 2012-08-23T08:42:57.753 に答える