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.