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

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

 


Moderator


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

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


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

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



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

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


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


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

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


Чёрт, а ведь вы правы.
Тогда лучше сделать возврат "2" во втором пункте, независимо от числа в строке. Т.е. если rebuilding есть - 2.

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


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

Ветеран


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

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


Цитата zegordo:
Если есть rebuilding, выводить цифры без % из этой строки, в данном тексте вывод должен быть "23" »
А degraded при этом есть или нет?

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


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


Ветеран


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

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


zegordo, а что Вам та же wmic.exe/WMI CIM Studio говорит в этот момент насчёт состояния массива (подходящие классы Вам самому поискать придётся)?

Цитата zegordo:
Есть текстовый файл »
Как/откуда он берётся? Может, лучше будет зараз разбирать вывод утилиты напрямую (если сие возможно, конечно)?

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


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


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

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


Цитата Казбек:
А degraded при этом есть или нет? »
есть, пример как раз под спойлером

Цитата Iska:
Как/откуда он берётся? Может, лучше будет зараз разбирать вывод утилиты напрямую (если сие возможно, конечно)? »
с рейд-контроллером можно общаться через CLI
Скрытый текст


Текст в первом посте выдаётся командой "info -o -vd"

Ну а т.к. это cli, простой батник требует файла команд, результат которых и скидывает в .txt рядом

т.е. примерно так

Код: Выделить весь код
c:\mvsetup.exe < c:\failcomand.txt > c:\resultat.txt

Цитата Iska:
а что Вам та же wmic.exe/WMI CIM Studio говорит в этот момент насчёт состояния массива »
А никак, рейд хардварный, винда видит массив всегда стабильно работающим и не имеет доступа к дискам в нём

Последний раз редактировалось zegordo, 05-04-2018 в 16:56.


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


Ветеран


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

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


так хватит?
Код: Выделить весь код
@echo off
<file.txt (>nul find "degraded" && (
  for /f "delims=" %%a in ('find "rebuilding"') do for %%x in (%%a) do echo "%%x"|>nul findstr [0-9] && call echo %%x)
 )
)
pause

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


Ветеран


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

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


Цитата zegordo:
т.е. примерно так… »
Попробуйте выполнить в консоли:
Код: Выделить весь код
echo info -0 -vd | c:\mvsetup.exe | find.exe /i /v ""
Будет вывод текста на консоль?

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

echo info -0 -vd | c:\mvsetup.exe | find.exe /i "degraded" && (
	echo info -0 -vd | 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
При нормальном состоянии нулевой код возврата, при повреждённом — 1, при перестройке массива — 2.

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


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

Ветеран


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

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


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

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

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

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

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


Последний раз редактировалось Казбек, 05-04-2018 в 16:37.


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


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


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

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


Цитата alpap:
так хватит? »
а зачем занулять? даже без этого, результат не даёт.

Цитата Iska:
Будет вывод текста на консоль? »
FIND: Invalid switch написал только.
важно отметить, это hyper-v server 2016, возможно не хватает каких-то компонентов.

Соответственно ваш код даёт следующий результат:

Код: Выделить весь код
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.
ну, про exit я забыл добавить, что окно не закроется, пока не написать его, но это мелочь. выглядит в любом случае странно.


Казбек, ваш вариант рабочий, только если есть и degraded и rebuilding выводит 2, потом 0 за одно исполнение

Последний раз редактировалось zegordo, 05-04-2018 в 17:13.


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



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




 
Переход