Windows批处理 - Findstr并分配给变量

时间:2014-04-22 14:28:06

标签: windows batch-file

我正在尝试在文件中找到一个字符串,并将结果分配给变量以进行进一步处理。但由于某些原因,下面的代码不起作用。

我的字符串总是在第二行显示,所以我尝试了下面的代码,我可以在控制台上打印正确的字符串,但无法将其分配给变量:

for /f "tokens=1*delims=:" %%G in ('findstr /n "^" C:\myfolder\payload.xml') do if %%G equ 2  echo %%H

问题:使用上述方法我无法将结果存储在变量中

我也尝试了另一种方法:

findstr /g "FilePath" C:\myfolder\payload.xml>>D:\Data\tmp.txt
set /p "Prev_FileName="<D:\Data\tmp.txt  
echo %Prev_FileName%

问题:使用此方法获取文件tmp.txt中的输出,但不是变量中的输出。 在使用SETLOCAL EnableDelayedExpansion

的两种情境中

作为初学者,你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

在任一上​​下文中都不需要采取任何异常步骤来设置变量。你怎么知道这个变量还没有设置好?

您发布的第一个代码不会尝试设置任何内容,但是如果您将echo %%H更改为set "Prev_FileName=%%H",那么它应该只能找到。

第二个代码应该是设置变量。

为什么你认为你的变量没有被设定?我怀疑你正在做echo %Prev_FileName%之类的事情,而没有看到你预期的结果。如果您位于带括号的命令块中,则会发生这种情况,因为它们都会立即解析,并且%Prev_FileName%会在解析时扩展。你说你setlocal enableDelayedExpansion,但除非你也改变了变量扩展的语法,否则它什么都不做。您应该使用echo !Prev_FileName!代替。