CMD/BAT - [решено] Поиск по тексту в txt с "если"

Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Поиск по тексту в txt с "если"

Сообщение megaloman »

Цитата megaloman:



2. Если в тексте есть слово degraded и нет rebuilding, выводить "-1" (именно с минусом)
CMD/BAT - [решено] Поиск по тексту в txt с "если"




Ну, вообще-то коды возврата должны описываться целым беззнаковым. -1 — это 0xFFFFFFFF, обычно резервируется для неопознанных ошибок или общих сбоев.




Цитата zegordo:



Iska, выглядит так, что ничего не изменилось
CMD/BAT - [решено] Поиск по тексту в txt с "если"




Возвращаясь к:


Цитата zegordo:



> -o : invalid object '-vd'
CMD/BAT - [решено] Поиск по тексту в txt с "если"




Там у Вас изначально не только ноль был вместо буквы o, но и ненужный дефис - перед vd. В справке утилиты, которую Вы выложили, описан правильный формат.



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





Вариант с echo

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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









Вариант с командной строкой

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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, а, похоже, напрямую в консоль Изображение.
Аватара пользователя
zegordo

Re: CMD/BAT - [решено] Поиск по тексту в txt с "если"

Сообщение zegordo »

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
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Поиск по тексту в txt с "если"

Сообщение Iska »

Цитата zegordo:



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

status: degraded

status: degraded

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

Status: Degraded
CMD/BAT - [решено] Поиск по тексту в txt с "если"




«Поздравляю, Шарик, ты — балбес!»™. Приношу Вам свои извинения, это я забыл, что вывод-то за find.exe тоже нужно подавлять, он ведь нам не нужен.



Попробуйте так:



Вариант с echo

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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








Вариант с командной строкой

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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 тот что нужен, т.к. запускаться будет именно сам батник.
CMD/BAT - [решено] Поиск по тексту в txt с "если"




Без разницы — и тот вариант, и другой — пакетные файлы.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Поиск по тексту в txt с "если"

Сообщение megaloman »

zegordo,


Если Минусы же совсем не годятся, то вот по Вашей постановке (еще проще)

[spoiler]Вариант с текстовым файлом

Код:
[/spoiler]

Код: Выделить всё

@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%
Аватара пользователя
zegordo

Re: CMD/BAT - [решено] Поиск по тексту в txt с "если"

Сообщение zegordo »

Извиняюсь за поздний ответ, на выходных не было возможности проверить.

Большое спасибо всем кто откликнулся и, особенно Iska: ваш вариант пойдёт в бой
Ответить

Вернуться в «Скриптовые языки администрирования Windows»