Пакетный файл Windows: Канал уничтожает мой код возврата

это возможный возвратить errorlevel также, если я передаю вывод по каналу сценария в файл журнала:

test1.bat:

 call test2.bat 2>&1 | tee log.txt
 echo ERRORLEVEL: %ERRORLEVEL%

test2.bat:

 exit /B 1

Вывод при вызове test1.bat:

 ERRORLEVEL: 0

errorlevel всегда 0.

Проблема, я хочу назвать другой сценарий в своем сценарии, где вывод должен быть перенаправлен синхронно с выводом, показанным в командной строке, поэтому простое> недостаточно для меня. Я попробовал несколько идей, но результат состоит в том, что канал всегда, кажется, уничтожает данный ошибочный уровень... :(

Можно ли дать мне дальнейшие предложения?

Заранее спасибо... :)


Спасибо за Ваш ответ... К сожалению, это не работает также... :( Посмотрите то, что я попробовал:

test1.bat:

 echo off
 set VAR1=" "
 echo VAR1 before test2: %VAR1%
 call test2.bat 2>&1 | tee log.txt
 echo VAR1 after test2: %VAR1%

test2:

 @echo off
 set VAR1=ERROR
 echo VAR1 in test2: %VAR1%
 exit /B 1

Вывод при вызове test1.bat:

 VAR1 before test2: " "
 VAR1 in test2: ERROR
 VAR1 after test2: " "

Как другое решение я пытался сохранить "ERRORVALUE: 1 дюйм в файл журнала в случае, если существует ошибка. В mainscript я хотел проанализировать журнал, ища эту строку. К сожалению, сохранение находить-результата к переменной среды не работает также, я сделал следующим образом:

FOR /F "tokens=1 delims=" %%A in ('type %logDir%\03_applySqls.log | find /c "ERRORVALUE: 1"') do SET val=%%A

Ошибка я добираюсь:

"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Таким образом, как я могу, по крайней мере, проанализировать свой файл журнала и в случае, если строка найдена в журнале, я могу возвратить значение как errorlevel?

10
задан Bill the Lizard 15 August 2011 в 12:28
поделиться

1 ответ

Проблема в том, что tee выходит из после вашего командного файла, и поэтому его собственный код выхода перезаписывает код из командного файла.

Насколько мне известно, вы мало что можете с этим поделать, кроме как использовать другой механизм обработки ошибок. Вы можете использовать переменную среды для хранения кода выхода вашего пакета. тройник этого не коснется.

1
ответ дан 4 December 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: