перенаправление потока для всего файла .bat внутри себя

#batch-file

#пакетный файл

Вопрос:

Недавно я начал работать с файлами .bat и пытаюсь перенаправить выходные данные в файл.

Пока я нашел 2 варианта:

  1. echo aaa > out.txt — который отправляет выходные данные единственной команды echo в указанный файл (также может быть добавлен с помощью >> )
  2. вызов всего файла из cmd с помощью somefile.bat > out.txt (что на самом деле похоже на номер 1, поскольку оно отправляет вывод одной команды somefile.bat в out.txt )

Я ищу кое-что еще — я пытаюсь создать в моем файле строку, которая отправляет весь вывод из этой точки в файл.

Спасибо!

Ответ №1:

 echo this goes to screen
(
echo this line goes to the file
echo also this line and the ping-output
ping www.stackoverflow.com
echo and this
)>file.txt
echo this goes to screen again
  

Примечание:

все внутри блока (между ( и ) ) анализируется сразу. Если вы используете переменные внутри блока, вам может потребоваться отложенное расширение.

Ответ №2:

Универсального решения не существует. Это зависит от требований к пакетному файлу.

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

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

 @echo off
    call :mainProcess %* > outputFile
    exit /b

:mainProcess
    :: here the batch file begins
    echo %1 %2 %3
  

Комментарии:

1. Мне нравится это, потому что оно очень точно соответствует «… в моем файле есть строка, которая отправляет все выходные данные с этого момента и далее …» (хотя это три строки ^^) — и нет необходимости в отложенном расширении.

2. Мне это тоже понравилось, но это больше походило на организацию ответа Стефана и вызов пакетного файла, чем на что-то новое. Но это отличный ответ, и очень ясный