Подтвердить что ты не робот

Как я могу записать вывод script, если он запускается планировщиком задач?

С помощью Windows Server 2008, как мне сделать захват вывода script, который запускается с планировщиком задач Windows?

Я тестирую довольно длинный пользовательский пакет печати script, и для целей отладки я хотел бы видеть весь вывод из него каждую ночь.

4b9b3361

Ответ 1

У вас может быть debug.cmd, который вызывает yourscript.cmd

yourscript.cmd > logall.txt

вы планируете debug.cmd вместо yourscript.cmd

Ответ 2

Попробуйте это как командную строку в планировщике заданий:

cmd /c yourscript.cmd > logall.txt

Ответ 3

С stderr (где большая часть ошибок идет):

cmd /c yourscript.cmd > logall.txt 2>&1

Ответ 4

>> будет добавлять файл журнала, а не переписывать его каждый раз. 2>&1 также отправит ошибки в ваш файл журнала.

cmd /c YourProgram.exe >> log.txt 2>&1

Ответ 5

Чтобы добавить комментарий @user2744787, вот скриншот, показывающий, как использовать cmd с аргументами в запланированной задаче:

введите описание изображения здесь

Ответ 6

Вы можете записать в файл журнала строки, которые вы хотите вывести следующим образом:

@echo off
echo Debugging started >C:\logfile.txt
echo More stuff
echo Debugging stuff >>C:\logfile.txt
echo Hope this helps! >>C:\logfile.txt

Таким образом вы можете выбрать, какие команды вывести, если вы не хотите тратить все, просто получите то, что вам нужно увидеть. > выведет его в указанный файл (создавая файл, если он не существует и перезаписывает его, если он это делает). >> будет добавлен к указанному файлу (создав файл, если он не существует, но добавляется к содержимому, если он это делает).

Ответ 7

Попробуйте cmd/c и пользовательскую временную метку

Чтобы основываться на ответах других здесь, может быть, что выходной файл, который вы хотите создать, имеет дату или время, встроенные в имя выходного файла. При 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

EDIT: Внимание: метка времени может содержать пробел!

Как указывал @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