#windows #bat #автоматизация #task #users
OC: Windows 2008 R2 Enterprise Моя ситация: С помощью Task Sheduler ежедневно запускается определенный .bat файл. Иногда есть потребность запускать его вручную. Моя задача: При ручном запуске от Юзера, после прохождения команд оставить консоль открытую (Pause) чтобы прочитать логи. При этом после запуска с помощью Task Sheduler процесс должен терминироваться без Паузы. %USERNAME% не подходит, так как TS запускает бптник от того же пользователя, что и запускает его вручную. Есть ли возможность определить запускает батник Task Sheduler? Может можно терминировать программу другим способом? Например через минуту после того как она дойдет до конца?
Ответы
Ответ 1
Вариант 1. Настройте запуск этого самого батника с параметром. В самом батнике проверяйте параметр: if "%1"=="" pause или вот так: if not "%1"=="nopause" pause Вариант 2. Научите пользователя запускать батник не двойным кликом - а как полагается, из командной строки. Командная строка не закрывается просто так. Вариант 3. Научите пользователя запускать батник используя FAR Manager. Там можно посмотреть консольный вывод скрыв панели (Ctrl+O) Но самым "красивым" способом я считаю создание отдельного ярлыка для батника. В этом ярлыке настраивается запуск файла через cmd с ключом /k. Ключ /k означает "выполнить команду и не закрывать консоль":Ответ 2
Есть ли возможность определить запускает батник Task Sheduler? В принципе, эту информацию можно вытащить (см. комментарий @avp к посту) Видно, что можно поискать родителя и сравнить с svchost.exe. Однако, мне кажется, что лучше решить вашу задачу другим способом. Можно передавать при запуске из таск шедулера дополнительный параметр, который опускать при ручном запуске. Когда батник получит управление -- проверить, с каким параметром был вызван. Если вручную -- запустить дополнительную команду (паузу). По-моему весьма тривиальный и логичный воркэраунд.Ответ 3
В Task Scheduler запускать VbScript, который будет запускать батник и после отработки процесса завершать его. Терминировать процесс можно так. var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run("taskkill /IM iexplore.exe", 0);
Комментариев нет:
Отправить комментарий