1

У меня есть текст, как это:

[Server]
Version=3
DTBNumber=1
[DTB001]
DTBName=ODBC;DRIVER=SQL Native Client;UID=MAN;PWD=bingo156;DATABASE=SHITMAN;SERVER=(local);
DTBType=5
DTBnUtenti=1
DTBUtenti=002LUCA;

Как я могу извлечь слово "SHITMAN" между "DATABASE =" и ";" и сохранить его в переменной с пакетом?

1 ответ1

1

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

@echo off
setlocal
set "ln="
for /f "delims=" %%A in ('findstr /r "DATABASE=.*;" "test.txt"') do set "ln=%%A"
if not defined ln (
  echo Value not found
  exit /b 1
)
for /f "delims=;=" %%A in ("%ln:*DATABASE=%") do set "val=%%A"
echo Value=%VAL%

Есть способы сделать чистую партию более надежной. Но есть простой инструмент, который обеспечивает очень надежное и простое в использовании решение: REPL.BAT - это гибридная утилита пакетной обработки /JScript, которая выполняет поиск и замену регулярных выражений в stdin и записывает результат в стандартный вывод. Опция A возвращает только те строки, которые были изменены.

@echo off
set "val="
for /f "delims=" %%A in ('type test.txt^|repl ".*DATABASE=(.*?);.*" $1 a') do set "val=%%A"
echo Value=%VAL%

Отравляющие символы могут привести к сбою последнего решения при выводе значения на экран. Использование отложенного расширения в последнем операторе ECHO заставит его работать с любым допустимым значением переменной среды пакетной обработки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .