2012-03-23 32 views
3

バッチコードを作成しましたが、これはうまくいくと思いました。私はこのコードがやっていると思いますか?私はいくつかのプラグインを持っています。ですから、私はplugins.txtからプラグインリンクを取得します。それから、プラグインをSVNからjava文で取得します。私はプラグインをデプロイし、test1.txtにフィードバックを得ます。次に、そのファイルでfindStrを実行し、 "BUILD SUCCESSFUL"を検索します.Geluktをビルドする場合は、Build Foutを追加します。しかし、私はいつもGelukt Buildという答えを得ていますが、画像でわかるように、Buildは失敗していると返信します。FindStrが正しく動作しない

このコードは何が問題ですか?

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 
) 

enter image description here

+0

Btwです。 HTMLコードを簡単にエコーするには、[技術が消えてしまう](http://stackoverflow.com/a/7308647/463115)を使うことができます。​​%%​​Bu ... ' – jeb

+0

私のためにはうまくいかない@jeb = O私はまだ!"の! htmlファイルに保存します。 – Gynnad

+0

さて、 'setlocal EnableDelayedExpansion'で遅延拡張を有効にする必要があることを忘れてしまいました。 – jeb

答えて

10

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

jebは引用符が消えてしまうというコメントで答えを述べた。 setlocal enableDelayedExpansionを先頭に置き、%ERRORLEVEL%の代わりに!ERRORLEVEL!を使用すると問題は解決されます。また、GregHNZは、FINDSTRステートメントの直後に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. 
) 
+0

これは私のために働いた!ありがとうございました! :) – Gynnad

2

%ErrorLevel%変数は、直前のコマンドに適用されます。その後、あなたの現在のコードでは

echo Errorlevel: %ERRORLEVEL% 

、あなたはすぐにFindStrコマンドの後、あなたのif %ERRORLEVEL% ==1ラインを入れてみてください

CDコマンドのエラーレベルを取得している、と:

あなたがこれを行うときに後でdelとcdをしてください。明らかに、echo文のhtmlファイルへのフルパスを入れる必要があります。

+0

コードを変更して、今すぐ最初の投稿に設定しました。でも、まだ動作しません。findStr文の直後にEcho%ERRORLEVEL%だけをテストしました。しかし、彼は常に0を出力します。コマンドラインのテキストでは、展開に失敗したと言われています。 – Gynnad

+0

@GregHNZ:%ERRORLEVEL%はCDコマンドのエラーレベルを指定していません。 FOR文が解析される前の値を与えています!しかし、FINDSTRステートメントの直後にエラー・レベル・テストを実行することは間違いありません。 – dbenham

関連する問題