Как я могу захватить вывод сценария, если он выполняется планировщиком задач?
используя 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
