Ответ 1
У вас может быть debug.cmd, который вызывает yourscript.cmd
yourscript.cmd > logall.txt
вы планируете debug.cmd вместо yourscript.cmd
С помощью Windows Server 2008, как мне сделать захват вывода script, который запускается с планировщиком задач Windows?
Я тестирую довольно длинный пользовательский пакет печати script, и для целей отладки я хотел бы видеть весь вывод из него каждую ночь.
У вас может быть debug.cmd, который вызывает yourscript.cmd
yourscript.cmd > logall.txt
вы планируете debug.cmd вместо yourscript.cmd
Попробуйте это как командную строку в планировщике заданий:
cmd /c yourscript.cmd > logall.txt
С stderr (где большая часть ошибок идет):
cmd /c yourscript.cmd > logall.txt 2>&1
>>
будет добавлять файл журнала, а не переписывать его каждый раз. 2>&1
также отправит ошибки в ваш файл журнала.
cmd /c YourProgram.exe >> log.txt 2>&1
Чтобы добавить комментарий @user2744787, вот скриншот, показывающий, как использовать cmd
с аргументами в запланированной задаче:
Вы можете записать в файл журнала строки, которые вы хотите вывести следующим образом:
@echo off
echo Debugging started >C:\logfile.txt
echo More stuff
echo Debugging stuff >>C:\logfile.txt
echo Hope this helps! >>C:\logfile.txt
Таким образом вы можете выбрать, какие команды вывести, если вы не хотите тратить все, просто получите то, что вам нужно увидеть. >
выведет его в указанный файл (создавая файл, если он не существует и перезаписывает его, если он это делает). >>
будет добавлен к указанному файлу (создав файл, если он не существует, но добавляется к содержимому, если он это делает).
Чтобы основываться на ответах других здесь, может быть, что выходной файл, который вы хотите создать, имеет дату или время, встроенные в имя выходного файла. При CMD.exe
это может быть достигнуто следующим образом. Обратите внимание, что этот метод выводит строковый вывод внутренних переменных среды Windows и разрезает их на основе положения символа, поэтому может быть неправильным для области Windows, которую вы используете. Этот метод ограничивается работой с одним областью Windows. Например, то, что работает для США, может оказаться неудачным для Великобритании из-за различий в том, как дата и/или время отформатированы для каждого региона. PowerShell
более эффективен в том, что он может работать с разными областями Windows, а PowerShell
может вызывать CMD.exe
для запуска файлов .cmd
, но это выходит за рамки этого ответа.
Использование CMD.exe
Вы можете получить доступ к различным компонентам даты и времени, отредактировав переменные внутренней среды %date%
и %time%
следующим образом (опять же, точные значения среза зависят от региона, настроенного в Windows):
%date:~10,4%
%date:~4,2%
%date:~7,2%
%time:~0,2%
%time:~3,2%
%time:~6,2%
Предположим, что вы хотите, чтобы ваш файл журнала назывался "Log_[yyyyMMdd]_[hhmmss].txt
", вы должны использовать следующее:
Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
Чтобы проверить это, запустите следующую командную строку:
cmd /c echo Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
Объединяя все вместе, чтобы перенаправить как stdout
, так и stderr
из вашего script в файл журнала с текущей датой и временем, используйте следующую команду в качестве командной строки:
cmd /c YourProgram.cmd > Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt 2>&1
Как указывал @user25064, иногда времена до полудня могут появляться с ведущим пространством в часовую часть времени. Следовательно, имя файла должно быть обернуто в кавычки, чтобы исключить возможность отключения компьютера от командного процессора следующим образом:
cmd /c YourProgram.cmd > "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1