Войти

Показать полную графическую версию : [решено] Поиск по тексту в txt с "если"


Страниц : 1 [2]

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

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

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

@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, а, похоже, напрямую в консоль :).

zegordo
06-04-2018, 18:08
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
06-04-2018, 18:33
Iska, выводит не только описанный вами статус, но и дважды само слово, т.е. вывод выглядит так:
status: degraded
status: degraded
(и после небольшой паузы уже ваш текст)
Status: Degraded »
«Поздравляю, Шарик, ты — балбес!»™. Приношу Вам свои извинения, это я забыл, что вывод-то за find.exe тоже нужно подавлять, он ведь нам не нужен.

Попробуйте так:
@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

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

megaloman
06-04-2018, 18:47
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%

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




© OSzone.net 2001-2012