Запланированная задача и переменные окружения БЕЗ CMD /C

Вопрос или проблема

Мне нужно запустить задачу в планировщике задач 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 будет запущен как отдельный процесс.

Шаги к реализации

  1. Создание скрипта: Напишите батч-скрипт, который будет содержать вашу команду. Например:

    @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 для правильной обработки переменных.

  2. Настройка Планировщика заданий: Теперь настройте Планировщик так, чтобы он запускал ваш батч-файл. Для этого:

    • Откройте Планировщик заданий.
    • Создайте новую задачу.
    • В поле "Программа/скрипт" укажите путь к вашему скрипту.
    • Убедитесь, что задача запускается с необходимыми правами и в нужное время.
  3. Тестирование: Запустите задачу вручную в Планировщике и убедитесь, что ваш скрипт работает так, как ожидается. Это позволит вам проверить, что VLC запускается с правильными параметрами, а через заданное время процесс завершится.

Заключение

Хотя напрямую вы не сможете использовать переменные окружения в задаче Планировщика, создание отдельного скрипта позволяет обойти это ограничение и обеспечить корректность выполнения вашей команды. Такой подход также упрощает настройку таймаута для завершения процесса VLC.

Если у вас есть дополнительные вопросы или необходима помощь в реализации, пожалуйста, сообщите.

Оцените материал
Добавить комментарий

Капча загружается...