Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум 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
Благодарности: 8088

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


Цитата zegordo:
FIND: Invalid switch написал только. »
Что-то Вы не то скопировали, видимо.

Цитата zegordo:
важно отметить, это hyper-v server 2016, возможно не хватает каких-то компонентов. »
Э… Это банальная командная строка, внешняя утилита, родная.

Что говорит:
Код: Выделить весь код
find.exe /?
?

Отправлено: 17:00, 05-04-2018 | #11



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

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


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


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

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


Цитата Iska:
Что говорит: »
всё верно, как-то не так скопировал

теперь говорит

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

> -o : invalid object '-vd'
> info: option -o is required
> Ambiguous command 'in'!
> Ambiguous command 'i'!
> Type 'exit' to exit CLI.
так же чуть ранее обновил пост предыдущий, после вашего нового сообщения. http://forum.oszone.net/post-2807225-10.html

Отправлено: 17:16, 05-04-2018 | #12


Ветеран


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

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


zegordo, а если так, напрямую:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

c:\mvsetup.exe info -0 -vd | find.exe /i "degraded" && (
	c:\mvsetup.exe info -0 -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
?

Цитата zegordo:
> -o : invalid object '-vd' > info: option -o is required »
Я брал отсюда:
Цитата zegordo:
Текст в первом посте выдаётся командой "info -o -vd" »
Смотрите сами, что там должно быть, «-0» или «-o».

Отправлено: 17:48, 05-04-2018 | #13


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


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

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


то выглядит так

Скрытый текст


и в конце ещё status: successful
если не зажимать мышкой

Отправлено: 17:53, 05-04-2018 | #14


Аватара для Казбек

Ветеран


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

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


Цитата zegordo:
Казбек, ваш вариант рабочий, только если есть и degraded и rebuilding выводит 2, потом 0 за одно исполнение »
Пробуйте так:
Код: Выделить весь код
@echo off

>nul find "degraded" file.txt && >nul find "rebuilding" file.txt && (
echo 2
pause
exit /b
)

>nul find "rebuilding" file.txt || >nul find "degraded" file.txt || (
echo 1
pause
)

>nul find "degraded" file.txt && (
echo 0
pause
)

-------
Кто реку перешел, тому росы бояться ни к чему

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

Отправлено: 17:58, 05-04-2018 | #15


Ветеран


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

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


Цитата zegordo:
и в конце ещё status: successful
если не зажимать мышкой »
1. Не зажимайте. Просто откройте командную строку и выполните в ней пакетный файл. Я не вижу смысла добавлять всяческие pause в пакетные файлы.
2. А какой на самом деле сейчас статус?

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


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


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

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


Цитата Казбек:
Пробуйте так: »
Спасибо, пока выглядит рабочим, возьму как план Б, если не получится сделать без файлов ввода/вывода


Цитата Iska:
Смотрите сами, что там должно быть, «-0» или «-o». »
там o, я неправильно в посте дал, но в вашем коде заметил свою ошибку и её исправлял, поэтому все мои ответы - верны.

Цитата Iska:
1. Не зажимайте. Просто откройте командную строку и выполните в ней пакетный файл. Я не вижу смысла добавлять всяческие pause в пакетные файлы.
2. А какой на самом деле сейчас статус?»
без паузы или вывода результат в файл батник быстро отрабатывает, на миг оставляя "status: successful" в своём окне cmd (независимо от состояния рейда)


Вообще CLI этот схож с телнетом, если запускать его из командной строки - т.е. после команды telnet в батнике, команды что были после не сработают. Но думаю, вы это и так поняли уже

Последний раз редактировалось zegordo, 06-04-2018 в 10:25.


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


Ветеран


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

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


Цитата zegordo:
там o, я неправильно в посте дал, но в вашем коде заметил свою ошибку и её исправлял, поэтому все мои ответы - верны. »
Спасибо, ясно.

Цитата zegordo:
без паузы или вывода результат в файл батник быстро отрабатывает, на миг оставляя "status: successful" в своём окне cmd »
Я ж говорю — «ручками» откройте окно командной строки и в нём запускайте пакетный файл. Я вообще пользую Far Manager.

Цитата zegordo:
Вообще CLI этот схож с телнетом, если запускать его из командной строки - т.е. после команды telnet в батнике, команды что были после не сработают. »
Я бы сказал, что скорее на diskpart.

Тогда пробуем вернуться именно к варианту с 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
Можете даже выложить его (mvsetup.exe) вместе с потребными библиотеками куда-нибудь на обменник «на пощупать», упаковав в архив.

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


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


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

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


Iska, выглядит так, что ничего не изменилось
https://drive.google.com/open?id=1HF...Jevi7OcUWQWY-d - инсталлятор, при установке надо галкой отметить CLI чтобы поставил,
https://support.hpe.com/hpsc/doc/pub...a00022850en_us - гайдик
не знаю, поставится ли если контроллера нет.

апдейт
https://drive.google.com/open?id=1ZS...Brf4E_EZne0A1L вот сама утилита с библиотеками
на другом компе выдаёт по команде info -o -vd "Unable to get info of vd (error 13: Invalid adapter id)" что, в принципе, тот же текст.

Отправлено: 15:00, 06-04-2018 | #19


Ветеран


Contributor


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

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


Цитата zegordo:
Есть текстовый файл со следующим содержанием, в котором состояние логического диска рейда. »
Я бы предложил постановку:
1. Если нет ни rebuilding ни degraded, выводить 0 (это нормальное рабочее состояние системы, не нуль = уровень ошибки)
2. Если в тексте есть слово degraded и нет rebuilding, выводить "-1" (именно с минусом)
3. Если есть rebuilding и нет degraded выводить "-10"
4. Если есть rebuilding и degraded выводить "-11"
5. Если есть degraded с процентами, выводить проценты (в данном тексте 23 - тут бы я, вообще-то выводил бы 123, так как есть вероятность индикации 0% -легко подкорректировать)
Наверное, пункт 4 не реализуется никогда, так как его "перебьет" пункт 5.
Вот решение для текстового файла - проверял на Ваших текстах
Код: Выделить весь код
@Echo Off
cls

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

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

Set /A LWord2=0
Set "Proc="
FOR /F "usebackq tokens=1,5 delims= " %%r IN (`"find /i "%Word2%" "%FileIn%""`) DO (Set /A LWord2=-10 &Set "Proc=%%s")

If Not "%Proc%"=="" (
	Set /A OutErr=%Proc:~0,-1% 
) Else (
	Set /A OutErr=%LWord1%+%LWord2%
)

Echo %OutErr%
pause
Exit /B %OutErr%
Вот попытка решения без текстового файла. Проверялось частично: c:\mvsetup.exe моделировал More.com c файлом, так как иначе протестировать не на чем
Код: Выделить весь код
@Echo Off
cls

Set "PRG=c:\mvsetup.exe"
Set "Word1=degraded"
Set "Word2=rebuilding"

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

Set /A LWord2=0
Set "Proc="

FOR /F "usebackq tokens=1,5 delims= " %%r IN (`""%PRG%" |find /i "%Word2%" "%FileIn%""`) DO (Set /A LWord2=-10 &Set "Proc=%%s")

If Not "%Proc%"=="" (
	Set /A OutErr=%Proc:~0,-1% 
) Else (
	Set /A OutErr=%LWord1%+%LWord2%
)

Echo %OutErr%
pause
Exit /B %OutErr%
Уточните, пожалуйста, как запускается "c:\mvsetup.exe", с какими ключами и параметрами
Значение работы скрипта присваивается переменной и отображается, если Вам это нужно. Скрипт возвращает Errorlevel c этим значением, если понадобится этот скрипт вызывать из другого скрипта.

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


Последний раз редактировалось megaloman, 06-04-2018 в 18:08. Причина: Оптимизация кодов


Отправлено: 15:56, 06-04-2018 | #20



Компьютерный форум 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




 
Переход