![]() |
Найти строку и в ней записать в переменную содержимое между кавычек.
Всем привет!
Необходимо пройтись поиском по каждой строке во всём файле, найти определенную строку(несколько слов вхождений) и в этой найденной строке записать в переменную слова, находящиеся между кавычек. Как пример, ищем в файле ниже строку "Serial Number", затем в ней извлекаем значение "11325":
Код:
.... Upd. bat-файл будет грузиться только с FreeDOS. |
|
Цитата:
И нужно именно bat-файлом сделать, т.к. скрипт этот будет грузиться из FreeDOS. |
rango13,
Вот вариант
Код:
@Echo Off |
megaloman, боюсь, во:
Цитата:
|
Цитата:
Код:
Bad command or filename - ":Quote". |
rango13, во FreeDOS команда call может использоваться только для вызова внешних пакетных файлов, возможность вызова внутренних процедур (aka «Call :Quote …») отсутствует. Нет там и goto :eof, нет exit /b, нет и разбора по for /f.
|
Цитата:
Утилита, которая предоставляет информацию по материнской плате, работает только из 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). В первые две записываются значения из выделенных жирным строк, а последнее - тот номер, который дала бухгалтерия. |
может Phoenix BIOS Setup ?
|
Цитата:
Код:
wmic.exe BaseBoard get Manufacturer, Product, SerialNumber /value |
Iska, Каюсь, поставил на флэшку MS Dos 8. Там возможности CMD очень ограничены. FreeDos похоже не радостнее. ИМХО, решить поставленную задачу, только используя команды CMD, вряд ли возможно. Я не понимаю суперцель поставленной задачи, но, если надо загрузиться с флэшки и что-то отобразить из файла, возможное решение - наваять exe-файл на каком-нибудь забытом турбо-си/паскале/бейсике. Вот если бы можно было перенести CMD из Windows, например, 7 на флэшку со всеми основными утилитами. Пока не нашел как.
|
|
тут можно провести аналогию по работе до загрузки в систему, что мы обычно используем - Total Commander. Брать его в пару и крутить его рычаги, больше ничего в голову не идет.
|
Цитата:
Цитата:
Цитата:
Если б Вы объяснили общую задачу, в том числе — зачем (почему/для чего/с какой целью) нужно сие проделывать именно то, что описано, и именно из-под DOS, может быть, стало бы понятнее. |
Вложений: 2
Цитата:
Теперь зачем ещё прописывать значения Motherboard и Product Number: почему-то в матплатах от ASUS(которые у нас только и закупаются) эти значения пустуют - а через утилиту(AmideDOS.exe) эти значения можно прописать в BIOS и их как раз и вытащит клиент-сборщик Spiceworks. Проблема в том, что есть много ПК, где эти параметры не прописаны. В bat-файле я хотел передавать ему только Serial Number, а остальные два значения чтобы прописывались автоматом. В итоге все эти данные с помощью отчёта из Spiceworks автоматом собираются в единую таблицу Excel, по которой видно, что нужно модернизировать в новом году. |
Может быть, можно пользоваться не FreeDOS, а чем-то ещё подобным, чтобы скрипт работал полноценно?
|
rango13, дык, не факт, что Ваша утилита заработает под «чем-то ещё подобным» (коим является только Windows с WinAPI). Выход подсказали выше:
Цитата:
|
Цитата:
1. Скачал FreeDOS USB “Full” installer 2. Вытащил с него программу GREP и скопировал её на имеющуюся USB-флешку с FreeDOS и использовал GREP для нахождения необходимых строк. Не знаю почему, но команды FIND/FINDSTR("Invalid command") в этом дистрибутиве нет. 3. Т.к. матплаты только от ASUS в организации, то остается прописать два параметра: модель матплаты и серийный номер, чего скрипт и делает: Скрытый текст
@ECHO OFF amidedos /BM | GREP "(/BM)" amidedos /BP | GREP "(/BP)" amidedos /SS | GREP "(/SS)" set /p MODEL=Enter MotherBoard Model: set /p INV=Enter Inventory Number: amidedos /SM "ASUS" > null 2>&1 amidedos /BM "ASUS" > null 2>&1 amidedos /BMH "ASUS" > null 2>&1 amidedos /SP "%MODEL%" > null 2>&1 amidedos /BP "%MODEL%"> null 2>&1 amidedos /BPH "%MODEL%" > null 2>&1 amidedos /SS "%INV%" > null 2>&1 amidedos /CS "%INV%" > null 2>&1 cls ; Вывод итогового результата работы скрипта amidedos /BM | GREP "(/BM)" amidedos /BP | GREP "(/BP)" amidedos /SS | GREP "(/SS)" |
rango13, Вы что-то путаете с:
Цитата:
Скрытый текст
![]() |
Цитата:
Если что, для накатывания FreeDOS на USB-флешку использовал программу Rufus. У неё при форматировании флешки можно сразу сделать её загрузочной и записать на неё FreeDOS. Может, просто урезанная версия там. |
Цитата:
|
rango13,
прохожусь поиском по каждой строке во всём файле, найти определенную строку(несколько слов вхождений) и в этой найденной строке выделяю слова, находящиеся между кавычек. Как записать в переменную - не знаю
Использовал батник, который генерит программу для старого QBasic 1.1 - думаю, сможете его разыскать без проблем. Подозреваю, проще полностью написать Вашу задачу на базике и не уродоваться с батником
Тестировал в MS DOS 8. Кстати, ставил на флэшку посредством Rufus Код:
@Echo Off |
Цитата:
|
Время: 04:34. |
Время: 04:34.
© OSzone.net 2001-