Extrai uma string dentro de uma linha sem que os espaços entre outras strings

1

Eu tenho um texto assim:

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

Como posso extrair a palavra "SHITMAN" entre "DATABASE=" e ";" e armazená-lo em uma variável com um lote?

    
por Luca 05.11.2013 / 17:16

1 resposta

1

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.

    
por 05.11.2013 / 17:39