Как я могу захватить вывод сценария, если он выполняется планировщиком задач?
используя Windows Server 2008, как я могу захватить вывод сценария, который выполняется с помощью планировщика задач windows?
Я тестирую довольно длинный пользовательский пакетный скрипт печати, и для целей отладки я хотел бы видеть все выходные данные из него каждую ночь.
7 ответов:
вы можете иметь отладку.cmd, который вызывает yourscript.cmd
yourscript.cmd > logall.txt
расписание отладки.cmd вместо yourscript.cmd
The
>>
добавляет в лог-файл, а не перезаписывать его каждый раз. Элемент2>&1
также будет отправлять ошибки в файл журнала.cmd /c YourProgram.exe >> log.txt 2>&1
вы можете записать в файл журнала на строках, которые вы хотите вывести следующим образом:
@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
командный процессор для создания имени файла с отметкой времени для регистрации вывода запланированной задачичтобы построить на ответах других здесь, может быть, вы хотите создать выходной файл, который имеет дату и/или время, встроенные в имя файла. Вы можете использовать
cmd.exe
командный процессор, чтобы сделать это для вас.Примечание: этот метод принимает строковый вывод внутренних переменных среды Windows и разрезает их на основе на позиции персонажа. Из-за этого точные значения, приведенные в приведенных ниже примерах, могут быть неверными для используемой области Windows. Кроме того, с некоторыми региональными настройками некоторые компоненты даты или времени могут вводить пробел в созданное имя файла, когда их значение меньше 10. Чтобы устранить эту проблему, заключите имя файла в кавычки, чтобы любые непреднамеренные пробелы в имени файла не нарушали создаваемую командную строку. Поэкспериментируйте и найдите то, что работает лучше всего для вашей ситуации.
имейте в виду, что
PowerShell
сильнееcmd.exe
. Один из способов его более мощным является то, что он может иметь дело с различными регионами Windows. Но этот ответ касается решения этой проблемы с помощьюcmd.exe
, а неPowerShell
, так что мы продолжаем.используя
cmd.exe
вы можете получить доступ к различным компонентам даты и времени по для нарезки переменные внутренней среды
%date%
и%time%
следующим образом (опять же, точные значения нарезки зависят от региона, настроенного в Windows):
- год (4 цифры):
%date:~10,4%
- месяц (2 цифры):
%date:~4,2%
- день (2 цифры):
%date:~7,2%
- часы (2 цифры):
%time:~0,2%
- минуты (2 цифры):
%time:~3,2%
- вторая (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.exe /c echo "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt"
собирая все это вместе, чтобы перенаправить оба
stdout
иstderr
из вашего сценария в файл журнала с именем с текущей датой и временем, используйте может использовать следующее в качестве командной строки: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
Примечание использование кавычек вокруг имени файла для обработки экземпляров компонент даты или времени может ввести пробел.
в моем случае, если текущая дата / время были 10/05/2017 9: 05: 34 AM, приведенная выше командная строка будет производить следующее:
cmd /c YourProgram.cmd > "Log_20171005_ 90534.txt" 2>&1