提取行内的字符串,且与其他字符串之间没有空格

提取行内的字符串,且与其他字符串之间没有空格

我有一个这样的txt:

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

如何提取“DATABASE=”和“;”之间的单词“SHITMAN”并将其与批处理一起存储在变量中?

答案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 上执行正则表达式搜索和替换,并将结果写入 stdout。该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 语句中使用延迟扩展将使其适用于任何合法的批处理环境变量值。

相关内容