我正在尝试在文件中找到一个字符串,并将结果分配给变量以进行进一步处理。但由于某些原因,下面的代码不起作用。
我的字符串总是在第二行显示,所以我尝试了下面的代码,我可以在控制台上打印正确的字符串,但无法将其分配给变量:
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
作为初学者,你能帮忙吗?
答案 0 :(得分:0)
在任一上下文中都不需要采取任何异常步骤来设置变量。你怎么知道这个变量还没有设置好?
您发布的第一个代码不会尝试设置任何内容,但是如果您将echo %%H
更改为set "Prev_FileName=%%H"
,那么它应该只能找到。
第二个代码应该是设置变量。
为什么你认为你的变量没有被设定?我怀疑你正在做echo %Prev_FileName%
之类的事情,而没有看到你预期的结果。如果您位于带括号的命令块中,则会发生这种情况,因为它们都会立即解析,并且%Prev_FileName%
会在解析时扩展。你说你setlocal enableDelayedExpansion
,但除非你也改变了变量扩展的语法,否则它什么都不做。您应该使用echo !Prev_FileName!
代替。