3

バッチコードを作成しましたが、これでうまくいくと思いました。このコードは何をしていると思いますか? いくつかのプラグインがあり、デプロイが正しいかどうかをテストしたいと考えています。したがって、plugins.txt から pluginlink を取得します。次に、Java 文を使用して SVN からプラグインを取得します。プラグインをデプロイし、test1.txt でフィードバックを取得します。次に、そのファイルで findStr を実行し、「BUILD SUCCESSFUL」がある場合は検索します。Build Gelukt という文を追加し、失敗した場合は Build Fout を追加します。しかし、私は常に Build Gelukt という答えを受け取りますが、画像でわかるように、彼はビルドが Failed であると返信しています。

このコードの何が問題になっていますか?

for /f "tokens=* delims= " %%a in (plugins.txt) do (
echo %%a
cd "C:\dotCMS Automatic Install"
java -cp .;"C:\dotCMS Automatic Install\svnkit.jar" Test %%a
cd %dotcms_home%
call ant deploy-plugins > test1.txt
FindStr "SUCCESSFUL" test1.txt
if %ERRORLEVEL% ==1 (echo ^<tr BGCOLOR=\"#FFFFFF\"^>^<td^>%%a^</td^>^<td^>Build Fout^</td^>^</tr^> >> C:\dotCMSResults\goedje.html ) else (echo ^<tr BGCOLOR=\"#00FF00\"^>^<td^>%%a^</td^>^<td^>Build Gelukt^</td^>^</tr^> >> C:\dotCMSResults\goedje.html) 
del test1.txt
rem call ant undeploy-plugins >> test.txt
)

ここに画像の説明を入力

4

2 に答える 2

14

従来のバッチの問題-ERRORLEVELを設定し%ERRORLEVEL%、同じDO()句内を使用してそれにアクセスしようとしています。%VAR%展開は解析時に発生し、FOR ... DO()ステートメント全体が1回解析されるため、ステートメントが実行される前にERRORLEVELの値が表示されます。明らかにそれはうまくいきません。

ジェブは、引用符の消失に関するコメントで答えをほのめかしました。一番上にいると問題が修正され、の代わりにをsetlocal enableDelayedExpansion使用します。また、GregHNZは、FINDSTRステートメントの直後にERRORLEVELテストを実行する必要があるという点で正しいです。!ERRORLEVEL!%ERRORLEVEL%

遅延拡張を必要としない括弧内のERRORLEVELを処理する他の方法があります。

以下は、ERRORLEVELが1以上であるかどうかをテストします

IF ERRORLEVEL 1 (...) ELSE (...)

そして、以下は前のコマンドの結果に基づいて条件付きでコマンドを実行します

FindStr "SUCCESSFUL" test1.txt && (
  commands to execute if FindStr succeeded
) || (
  commands to execute if prior command failed.
)
于 2012-03-23T11:32:30.787 に答える