用于提取字符串部分的批处理脚本

时间:2017-11-13 13:22:40

标签: batch-file

我需要一个批处理脚本,它将读入另一个批处理脚本(batch2)和:

  • 寻找字符串" configout:"或" configin:"
  • 如果遇到这两个字符串中的一个,请提取其后的内容,直到字符串" .xml"
  • 将其粘贴到新的文本文件中。
  • 并为batch2的每一行执行此操作。

例如: 如果这是我在批处理脚本中的第一行

/configin:%faxml%fm_sellin_in.xml /configout:%faxml%transco_fm_sellin_out%col_transco%.xml /inputfile:

我应该在我的文本文件中有这个:

%faxml%fa_sellin_in.xml
%faxml%transco_fm_sellin_out%col_transco%.xml

我在Here看到了一个很好的代码:

for /f "tokens=1-2 delims=~" %%b in ("yourfile.txt") do (
  echo %%b >> newfile.txt
  echo removed %%a)

但我不知道如何根据具体情况进行调整。

1 个答案:

答案 0 :(得分:1)

为什么不用换行符替换所有/configin/configout? -

Replace string with a new line in Batch

例如

setlocal EnableDelayedExpansion

set "str=/configin:%%faxml%%fm_sellin_in.xml /configout:%%faxml%%transco_fm_sellin_out%%col_transco%%.xml /inputfile:"

set str=!str:/configin^:=^

!
set str=!str:/configout^:=^

!

现在,!str!将包含

fm_sellin_in.xml
transco_fm_sellin_out.xml /inputfile:

然后,您可以使用for循环来提取字符串

for /f "tokens=1,2 delims=. " %%a in ("!str!") do ()

for循环遍历每一行,并使用.字符拆分每一行。

因此%%a是您的文件名,%%b是扩展名。

然后

if [%%b]==[xml] (echo %%a.%%b>>mytextfile.txt)

我们将对batch2的所有行执行此操作。

完成的代码是

setlocal EnableDelayedExpansion

for /f "delims=" %%c in (batch2.txt) do (
set str=%%c
set str=!str:/configin^:=^

!
set str=!str:/configout^:=^

!
for /f "tokens=1,2 delims=. " %%a in ("!str!") do (if [%%b]==[xml] (echo %%a.%%b>>mytextfile.txt))
)