A seguinte solução em lote puro deve funcionar para a maioria dos cenários. Mas existem valores que podem causar falhas ou dar a resposta errada:
@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%
Existem maneiras de tornar o lote puro mais robusto. Mas há uma ferramenta simples que fornece uma solução muito robusta e fácil de usar: REPL.BAT é um utilitário de lote / JScript híbrido que executa a pesquisa regex e substitui stdin e grava o resultado em stdout. A opção A
retorna apenas as linhas que foram alteradas.
@echo off
set "val="
for /f "delims=" %%A in ('type test.txt^|repl ".*DATABASE=(.*?);.*" $1 a') do set "val=%%A"
echo Value=%VAL%
Caracteres envenenados podem fazer com que a última solução falhe quando o valor é impresso na tela. O uso da expansão atrasada na última instrução ECHO faria com que funcionasse com qualquer valor variável da variável de ambiente legal.