Перенаправление вывода из пакетного файла, ВКЛЮЧАЯ команды

У меня есть пакетный файл, который выполняет ряд команд. Когда каждый из них выполняется, он возвращает сообщение «успех» или «неудача». Достаточно просто перенаправить вывод каждого из них с помощью >> и отправить его в файл, но без соответствующей команды вывод бесполезен.

(Пакетный файл)

Command "D21" >> Myfile.txt
Command "D22" >> Myfile.txt
Command "D23" >> Myfile.txt
Command "D24" >> Myfile.txt

(Выходной файл: Myfile.txt)

Fail
Succeed
Fail
Succeed

Я хотел бы также отправить команду, которая была выполнена в этот файл, чтобы она могла выглядеть так...

(Желаемый выходной файл: Myfile.txt)

Command "D21" Fail
Command "D22" Fail
Command "D23" Succeed
Command "D24" Succeed

Любые мысли о том, как я мог бы сделать это с минимальными усилиями?


person user1408899    schedule 21.05.2012    source источник
comment
Добро пожаловать в StackOverflow. Пожалуйста, найдите время при публикации, чтобы правильно отформатировать код. Вы можете сделать это, сделав отступ не менее четырех пробелов или выделив весь код и либо щелкнув кнопку на панели инструментов с фигурными скобками ({}), либо нажав Ctrl+K. Вы можете просмотреть свое сообщение, вводя его в стиле WYSIWYG прямо под текстовым полем, чтобы вы могли правильно отформатировать его в режиме реального времени перед публикацией. Кроме того, пожалуйста, избегайте использования подписей в своих сообщениях; у вас есть страница профиля, связанная с вашей учетной записью, которая позволяет вам публиковать личную информацию, такую ​​как ваше имя. Спасибо. :)   -  person Ken White    schedule 22.05.2012


Ответы (3)


Я предполагаю, что вы хотите выборочно перенаправлять эхо-команды и вывод в пакете, а не во всем пакете.

@echo off
echo before not echoed, not captured
call :echoCommands >myFile.txt
echo after not echoed, not captured
exit /b

:echoCommands
echo on
Command "D21"
Command "D22"
Command "D23"
Command "D24"
@echo off
exit /b

Если вы хотите захватить весь пакетный файл, просто удалите перенаправление из скрипта, не отключайте эхо и перенаправляйте при вызове пакетного скрипта.

myScript >myFile.txt

Если вы хотите захватить весь вывод файла с помощью команд, и вы действительно хотите перенаправить в скрипте, тогда что-то вроде

@if "%~1" neq "_GO_" (
  >myFile.txt call "%~f0" _GO_ %*
  exit /b
)
@echo on
Command "D21"
Command "D22"
Command "D23"
Command "D24"

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

person dbenham    schedule 22.05.2012

Это способ разместить команду и ответ в одной строке.

@echo off
for /f "skip=6 delims=" %%i in (%~dpnx0) do (
    <nul set /p =%%i >> MyFile.txt
    %%i >> MyFile.txt
)
goto :eof
Command "D21"
Command "D22"
Command "D23"
Command "D24"
person panda-34    schedule 24.05.2012

Есть два способа сделать это. Первый немного «загадочный», но он выполняется с помощью однострочной команды:

for %%f in ("Command "D21"" "Command "D22"" "Command "D23"" "Command "D24"") do for /F "usebackq delims=" %%g in (`%%~f`) do echo %%~f %%g >> MyFile.txt

Это должно работать нормально. Просто немного неудобно добавлять больше Command "xxx".

Второй способ - использовать «подпрограмму» для обработки работы:

@echo off

call :work Command "D21"
call :work Command "D22"
call :work Command "D23"
call :work Command "D24"
goto :EOF



:work
for /F "usebackq delims=" %%g in (`%*`) do echo %* %%g
goto :EOF
person Kevin Fegan    schedule 13.06.2013