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

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

Ответить
Настройки темы
CMD/BAT - Найти строку и в ней записать в переменную содержимое между кавычек.

Новый участник


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

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


Изменения
Автор: rango13
Дата: 04-04-2018
Описание: добавление про FreeDOS.
Всем привет!

Необходимо пройтись поиском по каждой строке во всём файле, найти определенную строку(несколько слов вхождений) и в этой найденной строке записать в переменную слова, находящиеся между кавычек.

Как пример, ищем в файле ниже строку "Serial Number", затем в ней извлекаем значение "11325":

Код: Выделить весь код
....
Motherboard "ASUS"
....
Product Name "B150M-A"
Serial Number of motherboard "11325"


Upd. bat-файл будет грузиться только с FreeDOS.

Отправлено: 13:27, 03-04-2018

 
x0r x0r вне форума

Забанен


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

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


поиск и замена

Отправлено: 13:38, 03-04-2018 | #2



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

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


Новый участник


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

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


Цитата x0r:
поиск и замена »
Может быть, просто плохо искал, но посмотрев по поиску 4 страницы в этом разделе, не нашёл решения. Много предложений, где необходимо вывести в переменную уже известный набор символов, а не найти строку и затем в ней занести в переменную заранее неизвестное содержимое, расположенное между кавычек.
И нужно именно bat-файлом сделать, т.к. скрипт этот будет грузиться из FreeDOS.

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


Отправлено: 13:52, 03-04-2018 | #3


Ветеран


Contributor


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

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


rango13,
Вот вариант
Код: Выделить весь код
@Echo Off
cls

Call :Quote "Z:\Box_In\тра ля ля.txt" "Serial Number" "Rezult"
Echo [%Rezult%]     ErrorLevel=%ErrorLevel%

pause
GoTo :Eof

:Quote
	Set "%~3="
	For /F "usebackq tokens=2 delims=:" %%a In (`2^>nul FINDSTR /B /I /N /C:%2 %1`) DO (Call :OutQuote "%%a" %3 &Exit /B 0)
	Exit /B 1
	:OutQuote
		Set "OutRez=%~1"
		Call :OutRez0 "%OutRez:*"=% %2 
	GoTo :Eof
	:OutRez0
		Set "%~2=%~1"
GoTo :Eof

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


Последний раз редактировалось megaloman, 03-04-2018 в 16:12.


Отправлено: 15:21, 03-04-2018 | #4


Ветеран


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

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


megaloman, боюсь, во:
Цитата rango13:
FreeDOS »
такое не будет работать.

Отправлено: 17:41, 03-04-2018 | #5


Новый участник


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

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


Цитата Iska:
такое не будет работать. »
Да, действительно, результат работы скрипта:
Код: Выделить весь код
Bad command or filename - ":Quote".
[]     ErrorLevel=0

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


Ветеран


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

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


rango13, во FreeDOS команда call может использоваться только для вызова внешних пакетных файлов, возможность вызова внутренних процедур (aka «Call :Quote …») отсутствует. Нет там и goto :eof, нет exit /b, нет и разбора по for /f.

Отправлено: 13:49, 04-04-2018 | #7


Новый участник


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

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


Цитата Iska:
во FreeDOS команда call может использоваться только для вызова внешних пакетных файлов, возможность вызова внутренних процедур (aka «Call :Quote …») отсутствует. Нет там и goto :eof, нет exit /b, нет и разбора по for /f. »
Может быть, есть аналог FreeDOS, чтобы текущий скрипт работал?
Утилита, которая предоставляет информацию по материнской плате, работает только из DOS. Т.е. установил на usb-флешку FreeDOS, запустил утилиту, отображающую необходимую информацию и из её вывода вытащил определенные значения, которые затем этой же утилитой и изменил.

Вот пример её вывода

Initializing the SMBIOS interface. Please wait a moment......
Name R/W Status Information

--------------------------- --- ------ ----------------------------------

(/IV)BIOS version R Done "2501"

(/ID)BIOS release date R Done "07/22/2015"
(/SM)System manufacture R Done "ASUS"
(/SP)System product R Done "B85M-G"
(/SV)System version R Done "System Version"
(/SS)System Serial number R Done "sernum-791"
(/SU)System UUID R Done "60112E33DAD7DD1193FA10C37B9408E0h"
(/SK)System SKU number R Done "All"
(/SF)System Family R Done "ASUS"
(/BM)Baseboard manufacture R Done "ASUSTeK COMPUTER INC."
(/BP)Baseboard product R Done "B85M-G"
(/BV)Baseboard version R Done "Rev X.0x"
(/BS)Baseboard Serial number R Done "140525894105007"
(/BT)Baseboard Asset Tag R Done "To be filled by O.E.M."
(/BLC)BB. Loc. in Chassis R Done "To be filled by O.E.M." BaseBoardHandle = "0002h"
(/BMH)Baseboard manufacture R Done "ASUSTeK COMPUTER INC."
(/BPH)Baseboard product R Done "B85M-G"
(/BVH)Baseboard version R Done "Rev X.0x"
(/BSH)Baseboard Serial number R Done "140525894105007"
(/BTH)Baseboard Asset Tag R Done "To be filled by O.E.M."
-- More --
(/BLCH)BB. Loc. in Chassis R Done "To be filled by O.E.M."
(/CM)Chassis manufacture R Done "Chassis Manufacture"
(/CT)Chassis type R Done "03h"
(/CV)Chassis version R Done "Chassis Version"
(/CS)Chassis Serial number R Done "Chassis Serial Number"
(/CA)Chassis Tag number R Done "Asset-1234567890"
(/CO)Chassis OEM value R Done "00000000h"
(/CSK)Chassis SKU Number R Done "To be filled by O.E.M."
(/OS)OEM string #1 R Done "To Be Filled By O.E.M."
(/OS)OEM string #2 R Done "To Be Filled By O.E.M."
(/OS)OEM string #3 R Done "AB85"
(/OS)OEM string #4 R Done "To Be Filled By O.E.M."
(/SCO)System Conf. Op. #1 R Done "To Be Filled By O.E.M."

(/PBH)PortBat Handle R Invalid
(/PBL)PortBat Location R Invalid
(/PBM)PortBat Manufacturer R Invalid
(/PBD)PortBat Manu. Date R Invalid
(/PBS)PortBat Serial Num R Invalid
(/PBN)PortBat Device Name R Invalid
(/PBCH)PortBat Device Chem. R Invalid
(/PBCA)PortBat Design Cap. R Invalid
(/PBV)PortBat Design Volt. R Invalid
(/PBSV)PortBat SBDS Ver.Num. R Invalid
(/PBE)PortBat Maxmum Error R Invalid
(/PBSN)PortBat SBDS Serial Num.R Invalid
(/PBSD)PortBat SBDS Manu. Date R Invalid
(/PBSC)PortBat SBDS Dev. Chem. R Invalid

Сейчас приходится вручную запускать три команды с ключами: (/SM), (/SP), (/SS). В первые две записываются значения из выделенных жирным строк, а последнее - тот номер, который дала бухгалтерия.

Последний раз редактировалось rango13, 05-04-2018 в 06:12.


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


Ветеран


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

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


может Phoenix BIOS Setup ?

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


Ветеран


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

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


Цитата rango13:
Может быть, есть… »
Я не знаю, что за утилита, равно как и то, что именно Вам требуется, и зачем. Как по мне, так для вывода вполне достаточно:
Код: Выделить весь код
wmic.exe BaseBoard get Manufacturer, Product, SerialNumber /value

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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как записать в переменную результат выполнения команды? MSI Скриптовые языки администрирования Windows 64 24-12-2020 18:20
CMD/BAT - [решено] Узнать имя пользователя и записать в переменную Darkar25 Скриптовые языки администрирования Windows 37 13-01-2018 23:59
CMD/BAT - Поиск 1ой папки и записать ее в переменную Andreyk1s Скриптовые языки администрирования Windows 2 06-01-2017 23:31
CMD/BAT - найти файл и записать в переменную pzh2393 Скриптовые языки администрирования Windows 7 20-01-2013 03:35
CMD/BAT - [решено] Найти в реестре параметр и записать в переменную имя ветки в которой он находится root221 Скриптовые языки администрирования Windows 11 25-11-2012 07:54




 
Переход