Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 16
1

Проверка существования задачи в Планировщике заданий

27.08.2015, 06:52. Показов 4600. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
3 дня уже бьюсь с проблемой, перечитал уже все, что только можно везде облазил.
Цель состоит в проверке состояния нескольких заданий в планировщике задач, если задача включена - отключить ее и вывести информацию, что отключили.
Если отключена, вывести информацию, что отключена.
Если задачи не существует, вывести информацию, что не существует и идти к следующей задаче.

Сразу скажу, я бат файлами занимаюсь так плотно, как сейчас всего неделю. По этому я нуб в этом деле.
Все, что делаю за счет полученной инфы от сюда или инета, пробую пока не получится, что необходимо.
Не думаю что я делаю это правильно, но главное работает.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
chcp 1251 >nul
 
set fixtask=schtasks /Change /TN "Microsoft\Windows\AppID\PolicyConverter" /Disable
for /f "usebackq delims=/\ tokens=6*" %%i in (' %fixtask% ') do set taskname=%%i
for /f "usebackq tokens=4" %%j in (' %fixtask% ') do set taskpath=%%j
for /f "delims=, tokens=3" %%k in (' SCHTASKS /QUERY /FO CSV /NH /TN %taskpath% ') do set reply=%%k
    if %reply%=="Отключено" (echo Задача: "%taskname:~,-2%" Отключена 
        ) else if %reply%=="Готово" (echo Отключить задачу "%taskname:~,-2%" в планировщике!
            ) else (echo  Задача: "%taskname:~,-2%" не существует 
                )
@pause
Я из кода лишнее убрал, оставил только эхо чтобы было понятнее.

Так вот проблема в том, что если задачи не существует выдает "ОШИБКА: Не удается найти указанный файл."
Как только я не подставлял еррорлевел, он пишет мне что = 0.
И из-за этого я не могу назначить действие при ошибке и в момент ошибки окно бат файла вырубает, я смог только понять, что за ошибка с помощью Console Window Interceptor, который отыскал тут пока маялся с этим.
При этой ошибке переменная %%k пустая, я делал условие для нее равной "" но не дает результата.
В общем я в тупике. Помогите пожалуйста! =)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2015, 06:52
Ответы с готовыми решениями:

Создание задачи в Планировщике заданий
Всем привет! Уважаемые эксперты подскажите, пожалуйста, как можно создать в планировщике задач...

Создание задачи в Планировщике заданий
Здравствуйте нужен Батничек, который создаст задачу в планировщике задач, что задача должна делать...

Как проверить, запущено ли в Планировщике заданий выполнение задачи?
Привет всем! Задача такая: - Периодически запускается задача (Task Sheduler). Нужно чтобы, если...

Удаление задания в планировщике заданий!
Всем привет! Как программно удалить задание с именем "Test" с планировщика заданий?) Без форм в...

6
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
27.08.2015, 10:00 2
Лучший ответ Сообщение было отмечено westyes как решение

Решение

westyes, Добавьте условие на на наличие переменной
Windows Batch file
1
If not "%var%"=="" поехали
1
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 16
27.08.2015, 14:51  [ТС] 3
alpap,
Благодарю, разобрался, все супер!!!!

Только я же написал, что я "нуб" (новичек) в этом
Полтора часа разбирался с этим %var%, пока не доперло, что имелось в виду моя переменная %reply%.
И хороший совет, по добавлению условия при отрицании, сокращает написание количества вариантов событий!

А моя проблема с добавлением условия при ошибке, когда пустой ответ, заключалась в том,
что надо было мою переменную %reply% заключить в кавычки, тогда при пустом ответе приходили кавычки "", а не пустое место.
Вот тогда то и срабатывает условие на просто "", если нет ответа. Так как на пустое место условие не назначить!
Только в этом случае надо дополнительно еще добавить символ: ~ в переменную %%k,
чтобы убрать дополнительные кавычки на нужном ответе. Либо из условия в ответе убрать кавычки.

Вот готовый вариант:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
chcp 1251 >nul
 
set fixtask=schtasks /Change /TN "Microsoft\Windows\AppID\PolicyConverter" /Disable
for /f "usebackq delims=/\ tokens=6*" %%i in (' %fixtask% ') do set taskname=%%i
for /f "usebackq tokens=4" %%j in (' %fixtask% ') do set taskpath=%%j
for /f "delims=, tokens=3" %%k in (' SCHTASKS /QUERY /FO CSV /NH /TN %taskpath% ') do set reply=%%~k
If not "%reply%"=="" (      
    if "%reply%"=="Отключено" (echo Задача: "%taskname:~,-2%" Отключена 
        ) else (echo Отключить задачу "%taskname:~,-2%" в планировщике!
            )
    ) else (echo Задача "%taskname:~,-2%" не существует!
)       
@pause
Все еду дальше

Хотел только спросить.
У меня 1 бат файл и в нем много разных задач для выполнения, таких как эта и на подобие.
То есть у каждой будет свое значение переменной %fixtask%.
И других похожих переменных в разных задачах и с разными значениями.
Нужно ли, чтобы значения переменных не пересекались и не вызвало не корректности при выполнении,
в эту задачу и во все остальные добавить в начало по setlocal и в конце endlocal?
Так как у меня там вызовами call
прыгает в разные места bat файла, в зависимости от не обходимого.

Я так и не смог разобраться в каких случаях используют эти сетлокалы, а каких нет.
И тем более setlocal enabledelayedexpansion и остальные. В справках и описаниях, как то, все заумно.
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
27.08.2015, 15:06 4
westyes, SetLocal - означает, что все переменные будут локальными и после выхода из Batch-файла обнулятся.
SetLocal EnableExtensions - означает возможность использования дополнительных ключей команд.
SetLocal EnableDelayedExpansion - означает возможность использовать восклицательные знаки (!variable!) для раскрытия значения переменной внутри цикла.

setlocal enableextensions enabledelayedexpansion

Добавлено через 6 минут
Не дописал, ноут б/у крашится в гомоэкран иногда, полное применение и endlocal (если надо, если еще в батнике работают другие батники и им это мешает) на отключение.
1
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 16
27.08.2015, 15:19  [ТС] 5
В общем стало более понятно. Спасибо.

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

Так как мне то же не понятны понятия "локальный" и "внутри цикла"
и в конце в вашей фразе все слова: "ноут б/у крашится в гомоэкран" значения этого не могу осилить
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
27.08.2015, 15:21 6
А можно простым языком. Переменная %%? после выхода из for обнулится, в for - назначенная %var%, будет иметь первое значение, !var! - следующее ей присвоенное другой или в другой команде, ну, например, вывели из for какую-то %var% и в этом цикле, если пойдет команда, например if "%var%"==..., то уже надо сперва сначала SetLocal EnableDelayedExpansion, и if "!var!"==..., а вот как в Вашем случае, можно было и
Windows Batch file
1
If not defined reply действие
, но первой строкой, или после @echo off, уже надо SetLocal EnableExtensions.

Добавлено через 1 минуту
Цитата Сообщение от westyes Посмотреть сообщение
и в конце в вашей фразе все слова: "ноут б/у крашится в гомоэкран" значения этого не могу осилить
- это мои проблемы, будут деньги буду решать.
1
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 16
27.08.2015, 15:31  [ТС] 7
Все теперь и это более мене понятно, и ваша та фраза, я то подумал,
что это какое то сокращение значений в бат

Теперь запишу себе ваше объяснение сетлокал и буду пытаться полностью осознать.
Благодарю еще раз за все ответы. Тема полностью решена!
0
27.08.2015, 15:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.08.2015, 15:31
Помогаю со студенческими работами здесь

Удаление запланированных заданий в планировщике
Как можно удать задания Microsoft? А точнее эти: Microsoft\Windows\Customer Experience...

Выключение компьютера в планировщике заданий
Здраствуйте. Ситуация такая: я задаю через командную строку выключение компьютера shutdown /s /t...

Создать задачу в планировщике заданий windows
Как средствами .NET создать новую задачу и добавить её в планировщик задач? К примеру для...

Выбивает ошибку при запуске в «планировщике заданий»
Мне нужно запустить эмуляцию клавиш, а в программе нужно нажать CTRL + SHIFT + ENTER, я хочу все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru