Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск по тексту в txt с "если"

Ответить
Настройки темы
CMD/BAT - [решено] Поиск по тексту в txt с "если"

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день!

Есть текстовый файл со следующим содержанием, в котором состояние логического диска рейда.

Скрытый текст
Код: Выделить весь код
CLI Version: 4.1.10.16   RaidAPI Version: 5.0.0.1061
Welcome to RAID Command Line Interface.

> 
Virtual Disk Information
-------------------------
id:                  0
name:                MicroBox
status:              degraded
Stripe size:         64
RAID mode:           RAID1
Cache mode:          Off 
size:                953789 M
BGA status:          running
Block ids:           0 4 
# of PDs:            2
PD RAID setup:       0 1 
Running OS:          yes
BGA progress:    rebuilding is 23% done


Total # of VD:       1

> Type 'exit' to exit CLI.
>


Выделенная строчка "BGA progress: rebuilding is 23% done" появляется только тогда, когда рейд восстанавливается.

Помогите пожалуйста составить батник со следующей логикой:

1. Если в тексте есть слово degraded, но нет rebuilding, выводить "0" (во всех вариантах вывод без кавычек)
2. Если есть rebuilding, выводить цифры без % из этой строки, в данном тексте вывод должен быть "23"
3. Если нет ни degraded, ни rebuilding, выводить "1"

Отправлено: 11:24, 05-04-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата megaloman:
2. Если в тексте есть слово degraded и нет rebuilding, выводить "-1" (именно с минусом) »
Ну, вообще-то коды возврата должны описываться целым беззнаковым. -1 — это 0xFFFFFFFF, обычно резервируется для неопознанных ошибок или общих сбоев.


Цитата zegordo:
Iska, выглядит так, что ничего не изменилось »
Возвращаясь к:
Цитата zegordo:
> -o : invalid object '-vd' »
Там у Вас изначально не только ноль был вместо буквы o, но и ненужный дефис - перед vd. В справке утилиты, которую Вы выложили, описан правильный формат.

Я попробовал и вариант с echo и с командной строкой, и тот, и тот, как и ожидалось, работают. При использовании echo потребно использование exit для выхода из утилиты, при использовании командной строки, понятное дело, сие не требуется.

Вариант с echo
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

(
	echo info -o vd
	echo exit
) | c:\mvsetup.exe | find.exe /i "degraded" && (
	(
		echo info -o vd
		echo exit
	) | c:\mvsetup.exe | find.exe /i "rebuilding" && (
		echo Status: Degraded and rebuilding
		exit /b 1
	) || (
		echo Status: Degraded
		exit /b 2
	)
) || (
	echo Status: Successfull
	exit /b 0
)

endlocal
exit /b 0

Вариант с командной строкой
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

c:\mvsetup.exe info -o vd | find.exe /i "degraded" && (
	c:\mvsetup.exe info -o vd | find.exe /i "rebuilding" && (
		echo Status: Degraded and rebuilding
		exit /b 1
	) || (
		echo Status: Degraded
		exit /b 2
	)
) || (
	echo Status: Successfull
	exit /b 0
)

endlocal
exit /b 0



P.S. И всё же утилита не совсем CLI, поскольку ошибки пишет не как положено — в stderr, а, похоже, напрямую в консоль .
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:32, 06-04-2018 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, я добавил в посте над вами утилиту, можно на ней и потестировать. Минусы же совсем не годятся, т.к. забирать вывод будет zabbix, на минусовом будут проблемы.
Но спасибо за потраченное время.

Iska, выводит не только описанный вами статус, но и дважды само слово, т.е. вывод выглядит так:

status: degraded
status: degraded
(и после небольшой паузы уже ваш текст)
Status: Degraded

p.s. вариант с echo тот что нужен, т.к. запускаться будет именно сам батник.
p.p.s. статус выше выдаёт для массива когда там только состояние degraded, если в тексте есть и degraded и rebuilding будет вывод выглядеть так:

status: degraded
BGA progress: rebuilding is 0% done
Status: Degraded and rebuilding

Отправлено: 18:08, 06-04-2018 | #22


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата zegordo:
Iska, выводит не только описанный вами статус, но и дважды само слово, т.е. вывод выглядит так:
status: degraded
status: degraded
(и после небольшой паузы уже ваш текст)
Status: Degraded »
«Поздравляю, Шарик, ты — балбес!»™. Приношу Вам свои извинения, это я забыл, что вывод-то за find.exe тоже нужно подавлять, он ведь нам не нужен.

Попробуйте так:
Вариант с echo
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

(
	echo info -o vd
	echo exit
) | c:\mvsetup.exe | >nul find.exe /i "degraded" && (
	(
		echo info -o vd
		echo exit
	) | c:\mvsetup.exe | >nul find.exe /i "rebuilding" && (
		echo Status: Degraded and rebuilding
		exit /b 1
	) || (
		echo Status: Degraded
		exit /b 2
	)
) || (
	echo Status: Successfull
	exit /b 0
)

endlocal
exit /b 0
Вариант с командной строкой
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

c:\mvsetup.exe info -o vd | >nul find.exe /i "degraded" && (
	c:\mvsetup.exe info -o vd | >nul find.exe /i "rebuilding" && (
		echo Status: Degraded and rebuilding
		exit /b 1
	) || (
		echo Status: Degraded
		exit /b 2
	)
) || (
	echo Status: Successfull
	exit /b 0
)

endlocal
exit /b 0


Цитата zegordo:
p.s. вариант с echo тот что нужен, т.к. запускаться будет именно сам батник. »
Без разницы — и тот вариант, и другой — пакетные файлы.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:33, 06-04-2018 | #23


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


zegordo,
Если Минусы же совсем не годятся, то вот по Вашей постановке (еще проще)
Вариант с текстовым файлом
Код: Выделить весь код
@Echo Off
cls

Set "FileIn=Z:\Soft_In\text1.txt"
Set "Word1=degraded"
Set "Word2=rebuilding"

Set /A OutErr=1
find /i "%Word1%" "%FileIn%" >nul &&Set /A OutErr=0

Set "Proc="
FOR /F "usebackq tokens=5 delims= " %%s IN (`"find /i "%Word2%" "%FileIn%""`) DO Set "Proc=%%s"

If Not "%Proc%"=="" Set /A OutErr=%Proc:~0,-1% 

Echo %OutErr%
pause
Exit /B %OutErr%
Вариант с утилитой (ключи добавьте сами
Set PRG="c:\mvsetup.exe" тра ля ля )
Код: Выделить весь код
@Echo Off
cls

Set PRG="c:\mvsetup.exe"

Set "Word1=degraded"
Set "Word2=rebuilding"

Set /A OutErr=1
%PRG% |find /i "%Word1%" >nul &&Set /A OutErr=0

Set "Proc="
FOR /F "usebackq tokens=5 delims= " %%s IN (`"%PRG% |find /i "%Word2%""`) DO Set "Proc=%%s"

If Not "%Proc%"=="" Set /A OutErr=%Proc:~0,-1% 

Echo %OutErr%
pause
Exit /B %OutErr%

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:47, 06-04-2018 | #24


Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Извиняюсь за поздний ответ, на выходных не было возможности проверить.
Большое спасибо всем кто откликнулся и, особенно Iska: ваш вариант пойдёт в бой

Отправлено: 09:17, 09-04-2018 | #25



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск по тексту в txt с "если"

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как правильно устанавливать программы если есть "Администратор" и "обычный пользоват" alex2887 Хочу все знать 6 24-02-2017 13:02
CMD/BAT - Как из строки в .txt вывести символы "которые там обновляются"в другой .txt Bombastig Скриптовые языки администрирования Windows 6 08-02-2014 04:54
CMD/BAT - [решено] Нужно создать "батник" - вырезать из "2.txt" первых n строк и вставить их в "1.txt" temphard Скриптовые языки администрирования Windows 12 10-01-2014 18:36
Разное - [решено] Возвращение в меню "Создать" пункта "Текстовый документ", ассоциирование с TXT Pavla Microsoft Windows 7 16 10-07-2012 07:47
Поиск слова в txt затем поиск по маске "(383)" и вывод инфы rustoss AutoIt 10 29-09-2011 15:27




 
Переход