Extraiga una cadena dentro de una línea sin espacios en blanco entre otras cadenas

1

Tengo un txt como este:

[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;

¿Cómo puedo extraer la palabra "SHITMAN" entre "DATABASE =" y ";" y almacenarlo en una variable con un lote?

Luca
fuente
Extraer información de un archivo INI de Windows es un problema más general relacionado.
Brian

Respuestas:

1

La siguiente solución de lote puro debería funcionar para la mayoría de los escenarios. Pero hay valores que pueden hacer que se bloquee o dar la respuesta incorrecta:

@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%

Hay maneras de hacer que el lote puro sea más robusto. Pero hay una herramienta simple que proporciona una solución muy robusta y fácil de usar: REPL.BAT es una utilidad híbrida por lotes / JScript que realiza búsqueda y reemplazo de expresiones regulares en stdin y escribe el resultado en stdout. La Aopción solo devuelve líneas que han sido alteradas.

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

Los caracteres de veneno pueden hacer que la última solución falle cuando el valor se imprime en la pantalla. El uso de la expansión retrasada en la última declaración de ECHO lo haría funcionar con cualquier valor variable de entorno de lote legal.

dbenham
fuente