2012-03-01 387 views
2

就像标题所说,我试图从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 

但是当我尝试运行脚本的命令窗口立即关闭(大概是由于一些错误,我试图在未来的放线暂停命令无济于事)。

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

回答

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。这将打开一个命令控制台。然后将光盘放入批处理文件所在的目录,然后通过键入其名称(不需要扩展名)来运行批处理文件。现在窗口在脚本终止后保持打开状态。你可以使用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 
+0

非常感谢!我不知道你可以用这种方式使用DIR,肯定会清理一些东西。 – mintchkin 2012-03-02 01:24:47