Войти

Показать полную графическую версию : [решено] Разбиение на строки с дальнейшим разбиением на несколько переменных


Strategist
30-01-2014, 15:56
Здравствуйте, есть zabbix и необходимость отслеживания выполнения заданий в планировщике Windows Server 2008
нужен bat файл который будет делать следующее:
1) запускать команду schtasks /query /TN "xxxxxxx" /FO LIST /V
которая выдает информацию в следующем виде:


Папка: \
Имя узла: xxxxxxx
Имя задачи: \Backup
Время следующего запуска: 31.01.2014 2:00:00
Состояние: Готово
Режим входа в систему: Интерактивный/фоновый
Время прошлого запуска: 30.01.2014 1:59:59
Прошлый результат: 0
Автор: xxxxxxx\xxxxxxx
Задача для выполнения: C:\scripts\backup.bat
Рабочая папка: Н/Д
Примечание: Н/Д
Состояние назначенной задачи: Включено
Время простоя: Отключено
Управление электропитанием: Останавливать при питании от батареи
Запуск от имени: xxxxxxx\xxxxxxx
Удалить задачу, если она не перенесена: Включено
Остановить задачу, если она выполняется X ч и X мин: 12:00:00
Расписание: Планирование данных в этом формате недоступно.
Тип расписания: Ежедневно
Время начала: 2:00:00
Дата начала: 21.12.2013
Дата окончания: N/A
дн.: Каждые 1 дн.
мес.: N/A
Повторять: каждые: Отключено
Повторять: до: время: Отключено
Повторять: в течение: длительность: Отключено
Повторять: остановить, если выполняется: Отключено


Кто еще не знает про эту команду надеюсь информация будет кому-нибудь полезной

2) Выбирать конкретную строку: "Прошлый результат: 0"
3) Давать на выходе значение 0 или 1 из этой строки

Помогите пожалуйста никак не могу справиться, пытал через вложенные циклы for (для разделения на строки с дальнейшим разделением на переменные с разделителем ":") но никак не могу с ними справиться.
Желательно все через переменные без создания лишних файлов
Спасибо

Iska
30-01-2014, 19:30
1) запускать команду schtasks /query /TN "xxxxxxx" /FO LIST /V

Кто еще не знает про эту команду надеюсь информация будет кому-нибудь полезной»
Судя по schtasks query (http://technet.microsoft.com/en-us/library/cc725744.aspx#BKMK_query), данная подкоманда не поддерживает параметр «/tn».

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
`schtasks.exe /query /fo csv /v ^| find.exe /i "Солитер"`
) do call :GetLastResult %%i

if defined LastResult echo [%LastResult%]

endlocal
exit /b 0

:GetLastResult
setlocal enableextensions enabledelayedexpansion
set sOut=%~0
endlocal & set %sOut:~4%=%~6
exit /b

Foreigner
30-01-2014, 19:47
Лучше в /fo csv:

@echo off
setlocal

for /f "tokens=7 delims=," %%i in ('schtasks /query /tn "\Backup" /fo csv /v /nh') do set "code=%%~i"
echo %code%

Iska
31-01-2014, 01:45
Foreigner, а у меня так 8-й токен выходит — по запятой внутри «Время следующего запуска» и «Время прошлого запуска» (если они есть, разумеется).

Strategist
31-01-2014, 08:50
Большое спасибо, Foreigner и Iska
Iska да да действительно на мелкомягком написано что /tn не поддерживается но на самом деле это не так.
Ваш пример явно рабочий, но к сожалению заставить его работать как мне нужно я не смог :-))))) у меня он выдает время прошлого запуска, а не следующий параметр т.е. результат запуска.
Foreigner кратко ясно лаконично спасибо большое, как я сам не догадался что лучше делать csv ибо тогда разбор идет просто по запятой не знаю......
PS лично у меня по команде help schtasks выдается следующее

/NH Указывает, что строка заголовков столбцов
не отображается при выводе. Это требуется
только для формата TABLE.

а у нас формат csv
Поэтому после того как я убрал этот параметр из скрипта все полетело отлично

Iska
31-01-2014, 09:19
Iska да да действительно на мелкомягком написано что /tn не поддерживается но на самом деле это не так. »
На какой ОС Ваш пример:
1) запускать команду schtasks /query /TN "xxxxxxx" /FO LIST /V
которая выдает информацию в следующем виде: »
работает именно в озвученном Вами виде?

Ваш пример явно рабочий, но к сожалению заставить его работать как мне нужно я не смог :-))))) у меня он выдает время прошлого запуска, а не следующий параметр т.е. результат запуска. »
Значит другое количество/порядок полей. Очевидно, потому у меня в примере коллеги Foreigner выходил иной результат. Выложите результат исполнения:
schtasks.exe /query /fo csv /v

Strategist
31-01-2014, 09:58
Как я и писал Windows server 2008 R2 Enterprice
на Windows 7 Pro sp1 работает абсолютно так же как как и на сервере
именно в озвученном мной виде
Результат выполнения в приложенном файле

Iska
31-01-2014, 10:16
Как я и писал Windows server 2008 R2 Enterprice »
Ранее Вы писали:
в планировщике Windows Server 2008 »
;).

именно в озвученном мной виде »
Спасибо, ясно. Будем считать, что очередная ошибка в справке. Я, конечно, потом попробую под Microsoft Windows Server 2008 R2.

Результат выполнения в приложенном файле »
Странно. Поля в том же порядке. Должно работать. Проверю и свой код на сервере.

Strategist
31-01-2014, 10:47
да вот так вот немного версия windows поменялась и уже все переписывай, причем ладно бы че-нить полезное добавляли, а то только все местами меняют а глючность как была так и остается... мелкомягкие :-( !!!
Еще раз всем спасибо тема закрыта




© OSzone.net 2001-2012