Вопрос или проблема
Мне нужно запустить задачу в планировщике задач Windows 2003, однако команда должна получать доступ к переменным окружения:
vlc.exe http://62.196.56.141:8080 --sout=#std{access=file,mux=raw,dst="C:\temp\streaming\%Date:~6,4%-%Date:~3,2%-%Date:~0,2%-RSMorning.mp3"}
Хотя приведенная выше команда будет работать при выполнении из пакетного файла или командной строки, она не сможет правильно расширить переменные, когда запущена из планировщика задач.
Кто-то мог бы утверждать, что это можно сделать с помощью префикса CMD /C, что позволит запустить команду в командной строке, однако, так как задачу необходимо будет принудительно завершить через некоторое время, cmd.exe будет завершен вместо вызываемой команды (в данном случае vlc.exe).
Есть ли какие-либо подсказки о том, как запустить команду без использования пакетного файла или командной строки, при этом правильно наследуя переменные окружения?
Попробуйте это
cmd /c start "" vlc.exe http://62.196.56.141:8080 --sout=#std{access=file,mux=raw,dst="C:\temp\streaming\%Date:~6,4%-%Date:~3,2%-%Date:~0,2%-RSMorning.mp3"}
Вы можете завершить процесс vlc с помощью чего-то, подобного
taskkill /fi "imagename eq vlc.exe"
ИСПРАВЛЕНИЕ – Теперь, когда я полностью понял вашу проблему:
Я довольно уверен, что нет простого решения, которое давало бы вам доступ к переменным окружения и позволяло бы планировщику задач завершить vlc по истечении времени. Ваша программа ничего не знает о расширении переменных окружения, поэтому это должно произойти до вызова vlc.exe
. Это работа cmd.exe
. К сожалению, в Windows нет истинных дочерних процессов, так что если вы запускаете vlc.exe
через cmd.exe
, то, когда планировщик задач завершает cmd.exe
, процесс vlc.exe
остается.
Я полагаю, вам придется написать скрипт, который запускает vlc.exe
, запоминая PID. Затем скрипт будет ждать предписанное вами время, а затем завершит vlc. Планировщик задач может запустить ваш скрипт.
Я считаю, что вы можете сделать то, что хотите, с помощью пакетного скрипта в Windows 2003, в зависимости от доступных инструментов (команд) в этой версии Windows.
TIMEOUT можно использовать для введения задержки. Например, чтобы подождать 1 минуту:
timeout 60 /nobreak >nul
WMIC можно использовать для запуска процесса и получения PID. См. Windows CMD Shell» Запустить процесс и получить его PID. Я думаю, что сложной частью будет передача аргументов в кавычках, но это можно сделать. Прочитайте всю тему.
Ответ или решение
Для запуска задачи в Планировщике заданий Windows 2003, которая бы использовала переменные окружения, необходимо учитывать несколько особенностей. Ваша задача заключается в том, чтобы передать команду VLC, использующую переменные окружения, но без использования cmd /C
, так как это не позволит корректно завершать процессы. Давайте разберем это детально.
Проблема
Как вы правильно заметили, запуск VLC с использованием переменных окружения через Планировщик заданий может вызвать трудности. Переменные окружения, такие как %Date%
, не будут правильно интерпретированы, когда команда запускается непосредственно из Планировщика. Это связано с тем, что Планировщик не выполняет интерполяцию переменных окружения так, как это делает cmd.exe
.
Рабочее решение
Чтобы обойти эту проблему, рекомендуется создать скрипт, который будет запускать VLC, а затем завершать процесс через заданное время. Скрипт будет интерпретировать переменные окружения, а сам VLC будет запущен как отдельный процесс.
Шаги к реализации
-
Создание скрипта: Напишите батч-скрипт, который будет содержать вашу команду. Например:
@echo off setlocal enabledelayedexpansion set "destination=C:\temp\streaming\%Date:~6,4%-%Date:~3,2%-%Date:~0,2%-RSMorning.mp3" start "" vlc.exe http://62.196.56.141:8080 --sout="#std{access=file,mux=raw,dst=!destination!}" timeout 60 taskkill /fi "imagename eq vlc.exe"
В этом скрипте используется
setlocal enabledelayedexpansion
для правильной обработки переменных. -
Настройка Планировщика заданий: Теперь настройте Планировщик так, чтобы он запускал ваш батч-файл. Для этого:
- Откройте Планировщик заданий.
- Создайте новую задачу.
- В поле "Программа/скрипт" укажите путь к вашему скрипту.
- Убедитесь, что задача запускается с необходимыми правами и в нужное время.
-
Тестирование: Запустите задачу вручную в Планировщике и убедитесь, что ваш скрипт работает так, как ожидается. Это позволит вам проверить, что VLC запускается с правильными параметрами, а через заданное время процесс завершится.
Заключение
Хотя напрямую вы не сможете использовать переменные окружения в задаче Планировщика, создание отдельного скрипта позволяет обойти это ограничение и обеспечить корректность выполнения вашей команды. Такой подход также упрощает настройку таймаута для завершения процесса VLC.
Если у вас есть дополнительные вопросы или необходима помощь в реализации, пожалуйста, сообщите.