我有一个这样的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 语句中使用延迟扩展将使其适用于任何合法的批处理环境变量值。