将FIND命令的输出保存到变量

时间:2012-03-01 21:15:45

标签: batch-file find

就像标题所说的那样,我试图从FIND命令获取输出并将其保存到变量中。具体来说,我正在使用:

DIR /b /s "C:\" | FIND "someexe.exe"

找到一个特定的.exe文件,这似乎工作正常,但后来我想保存FIND的结果,以便稍后在同一个脚本中使用。

我尝试了各种不同的调整:

for /f "usebackq" %%i in (`DIR /b /s "C:\" | FIND "someexe.exe"`) do SET foobar=%%i

但是当我尝试运行脚本时,命令窗口立即关闭(可能是由于某些错误,我尝试在下一行中放置一个PAUSE命令无效)。

我认为这是一些愚蠢的小事,我做错了但如果有人能告诉我它是什么我会很感激。仅供进一步参考,我不关心存在多少份“someexe.exe”,我只需要其中一个的路径。

1 个答案:

答案 0 :(得分:4)

您应该收到此错误:| was unexpected at this time.。您的直接问题是不带引号的特殊字符,例如|,当它们出现在FOR / F('命令')中时,必须使用^进行转义。

for /f "usebackq" %%i in (`DIR /b /s "C:\" ^| FIND "someexe.exe"`) do SET foobar=%%i

听起来您正在通过双击桌面或Windows资源管理器来运行批处理文件。这可行,但随后批处理终止后窗口立即关闭。在您的情况下,由于语法错误,它会在到达PAUSE之前终止。

我总是从命令窗口运行我的批处理文件:从“开始”菜单中选择run cmd.exe。这将打开一个命令控制台。然后将CD发送到批处理文件所在的目录,然后通过键入其名称来运行批处理文件(不需要扩展名)。现在,在脚本终止后窗口保持打开状态。您可以使用SET检查变量,运行另一个脚本,无论如何。

在您的情况下无需使用FIND - DIR可以直接找到该文件。此外,文件的路径可能包含空格,在这种情况下,它将被解析为标记。您需要设置“DELIMS =”或“TOKENS = *”,以便获得完整的路径。

我永远不明白为什么人们在执行命令时会使用USEBACKQ。我只是觉得它有用,如果我试图使用FOR / F与文件,我需要将文件用引号括起来,因为空格和/或特殊字符。

此外,由于目录不可访问,您可能会遇到错误。将stderr重定向到nul会清除输出。同样,>必须转义。

for /f "delims=" %%F in ('dir /b /s "c:\someexe.exe" 2^>nul') do set foobar=%%F