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

Batch file 将FIND命令的输出保存到变量,batch-file,find,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 但是,当我尝试运行脚本时,命令窗口立即关闭(可能是

正如标题所说,我试图从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
但是,当我尝试运行脚本时,命令窗口立即关闭(可能是由于某些错误,我尝试在下一行中放置一个暂停命令,但没有效果)


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

您应该会收到此错误:
|此时意外。
。您眼前的问题是,在FOR/F('command')中出现诸如
|
之类的不带引号的特殊字符时,必须使用
^
进行转义

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

我总是从命令窗口运行批处理文件:从“开始”菜单,您希望
运行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

谢谢!我不知道你可以这样使用DIR,肯定会把事情弄清楚一点。
for /f "delims=" %%F in ('dir /b /s "c:\someexe.exe" 2^>nul') do set foobar=%%F