Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Есть ли возможность при запуске .bat файла установить факт был ли он запущен вручную или автоматически(Task sheduler)?

#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);

Комментариев нет:

Отправить комментарий