FindStr не работает правильно - PullRequest
3 голосов
/ 23 марта 2012

Я сделал пакетный код и подумал, что это сработает.Что я думаю, что делает этот код?У меня есть несколько плагинов, и я хочу проверить правильность развертывания.Так что я получаю ссылку на плагин из plugins.txt.Затем я получаю плагин из SVN с предложением Java.Я развернул плагин и получил отзыв в test1.txt.Затем я выполняю findStr в этом файле и ищу «BUILD SUCCESSFUL», если оно есть, я хочу добавить предложение «Build Gelukt», а в случае неудачи - «Build Fout».Но я всегда получаю ответ Build Gelukt, хотя, как вы можете видеть на изображении, он отсылает, что сборка не удалась.

Что не так с этим фрагментом кода?

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

Ответы [ 2 ]

11 голосов
/ 23 марта 2012

Классическая проблема с пакетом - вы устанавливаете свой ERRORLEVEL и пытаетесь получить к нему доступ, используя %ERRORLEVEL% в том же предложении DO().Расширение %VAR% происходит во время разбора, и весь оператор FOR ... DO() анализируется один раз, поэтому вы видите значение ERRORLEVEL до того, как оператор был выполнен.Очевидно, что это не сработает.

Джеб упомянул ответ в своем комментарии об исчезновении цитат.Ваша проблема будет решена, если вы setlocal enableDelayedExpansion наверху, а затем использовать !ERRORLEVEL! вместо %ERRORLEVEL%.Кроме того, GregHNZ прав в том, что тест ERRORLEVEL должен выполняться сразу после вашего оператора FINDSTR.

Существуют другие способы обработки ERRORLEVEL в скобках, которые не требуют отложенного расширения:

Следующие тестыесли ERRORLEVEL больше или равен 1

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

и ниже, условно выполняет команды на основе результата предыдущей команды

FindStr "SUCCESSFUL" test1.txt && (
  commands to execute if FindStr succeeded
) || (
  commands to execute if prior command failed.
)
2 голосов
/ 23 марта 2012

Переменная %ErrorLevel% применяется только к непосредственно предыдущей команде.

Итак, когда вы делаете это:

echo Errorlevel: %ERRORLEVEL%

С вашим текущим кодом вы получаете уровень ошибки команды CD выше

Попробуйте ввести строку if %ERRORLEVEL% ==1 сразу после команды FindStr, а затем выполните del и cd. Очевидно, вам нужно будет указать полный путь к html-файлу в вашем выражении echo.

...