Как получить конкретное слово из файла с помощью пакетного скриптинга? - PullRequest
0 голосов
/ 26 августа 2018

У меня есть файл, содержимое которого состоит из следующих последовательных строк:

VERSION=7.0.2
BUILD=03bbabbd5c0f
PRODUCT=splunk
PLATFORM=Windows-AMD64

Из этого мне нужна только ВЕРСИЯ.Я попытался использовать следующую команду:

FOR /F "usebackq tokens=1 eol=P" %G IN ("C:\ProgramFiles\SplunkUniversalForwarder\etc\splunk.version") DO echo %G

Involved eol=P, потому что она не выводит последние две строки, но мне не нужна и вторая строка.Кто-нибудь может помочь?На самом деле главная цель - получить только номер версии, а не «VERSION =».

Ответы [ 3 ]

0 голосов
/ 26 августа 2018

В пакетном файле используйте этот код:

@echo off
for /F "usebackq tokens=1* delims==" %%A in ("C:\Program Files\SplunkUniversalForwarder\etc\splunk.version") do if /I "%%~A" == "VERSION" if not "%%~B" == "" set "Version=%%~B" & goto HaveVersion
echo Error: Could not find VERSION= with a version string in file:
echo        C:\Program Files\SplunkUniversalForwarder\etc\splunk.version
pause
goto :EOF

:HaveVersion
echo Version is: %Version%
pause

Обратите внимание на пробел в Program Files.

Команда FOR с используемой опцией /F читает указанный файл построчно с пропуском пустых строк и строк, начинающихся с ;, который является значением по умолчанию для опции eol (конец строки).

Опция usebackq необходима для полученияполное имя файла, заключенное в двойные кавычки, интерпретируется как имя файла, а не как строка для обработки.Двойные кавычки " вокруг полного имени файла требуются из-за пробела.

delims== переопределяет разделители для разделения строк на подстроки (токены) из пробела по умолчанию и горизонтальной табуляции до знака равенства.Поэтому FOR теперь разделяет строки, используя только = в качестве символа-разделителя для строк.

tokens=1* означает, что первая подстрока, разделенная знаком равенства, должна быть присвоена переменной цикла A,А оставшаяся часть строки после первого знака (ей) равенства должна быть присвоена без дальнейшего разделения на следующую переменную цикла в соответствии с ASCII таблицей , которая в этом случае является переменной цикла B.Теперь также должно быть понятно, почему переменные цикла чувствительны к регистру, а переменные среды не чувствительны к регистру.Имеет значение то, что является следующей переменной цикла, если указанная переменная цикла имеет значение A или a.

При каждом запуске цикла сначала выполняется сравнение строк без учета регистра, чтобы проверить, является ли строка версиинаходится в начале текущей строки.Если это первое условие истинно, второе IF условие используется для проверки того, что в файле действительно есть строка версии с правом на знак равенства.Если это второе условие также верно, строка версии присваивается переменной среды Version, и цикл завершается, продолжая обработку пакетного файла с переходом на строку под меткой HaveVersion.Поэтому другие строки в файле не обрабатываются FOR .

. В общем случае лучше ссылаться на переменную окружения ProgramFiles с %ProgramFiles% вместо использования C:\Program Files в качествеКаталог стандартных программных файлов для 64-битных приложений в Windows x64 соответственно для 32-битных приложений в Windows x86 может находиться на любом диске с любым именем папки.Но Сведения о реализации Windows WOW64 должны быть приняты во внимание, если командный файл должен работать на 32-битной Windows, на 64-битной Windows в 64-битной среде и на 64-битной Windows в 32-битной среде,См. Также статью в Википедии о Переменные среды Windows .

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

  • echo /?
  • for /?
  • goto /?
  • if /?
  • pause /?
  • set /?

См. Также Одна строка с несколькими командами с использованием пакетного файла Windows для объяснения оператора &.

0 голосов
/ 26 августа 2018

Упрощенно:

FOR /F "tokens=2 delims==" %G IN ('findstr "VERSION" "C:\ProgramFiles\SplunkUniversalForwarder\etc\splunk.version"') DO echo %G

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

0 голосов
/ 26 августа 2018

В продолжение моего комментария.

В командной строке:

For /F "UseBackQ EOL=P Tokens=1* Delims==" %A In ("%ProgramFiles%\SplunkUniversalForwarder\etc\splunk.version") Do @Echo %B

В виде командного файла:

For /F "UseBackQ EOL=P Tokens=1* Delims==" %%A In ("%ProgramFiles%\SplunkUniversalForwarder\etc\splunk.version") Do @Echo %%B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...