Windows x64& “路径中的括号”批处理文件问题

时间:2011-03-21 18:50:17

标签: windows path batch-file 64-bit parentheses

Windows x64版本包含以括号命名的文件夹,如“\ Program Files(x86)”,这会破坏我使用的批处理文件。问题专栏的一个例子:

for %% c in(%path%)do do“%% c \ xyz.exe”set xyz = OK

即。当它到达“(x86)”中的“)”时,它会输出一条错误信息并退出......

有关如何解决此问题的任何想法? 这是一个相当大的批处理文件,而且我没有时间用更好的语言重写它...

非常感谢:)

3 个答案:

答案 0 :(得分:5)

不能直接回答你的问题,但是如果你正在尝试做我认为你正在尝试的事情(确保路径中存在文件),你可以在批处理文件中使用以下内容。

   @echo off
   for %%i in (xyz.exe) do set xyz=%%~$PATH:i

   if "%xyz%" == "" Goto NotFound

   Echo "Found"
   Goto TheEnd

:NotFound
   Echo "Not found"

:TheEnd

答案 1 :(得分:3)

通常引用应该有效,但在这种情况下,您希望迭代;分隔的所有元素。

但是您可以将;替换为" "组合,因此括号被引用,您可以迭代元素。

示例:path=C:\temp;C:\windows;C:\Program Files (x86)
for循环将搜索到 "C:\temp" "C:\windows" "C:\Program Files (x86)"

代码看起来像

setlocal EnableDelayedExpansion
set "searchPath=!path:;=" "!"
for %%c in ("!searchPath!") do (
    if exist "%%~c\xyz.exe" set xyz=OK
)

答案 2 :(得分:2)

您可以使用文件夹的短名称来实现此目的。这就是你如何做到的。

在Windows中打开命令promt。 转到C盘(或您拥有程序文件夹的驱动器) 输入以下内容和

   c:\> dir /x  <Hit Enter>

这将返回所有文件夹的简短形式。

您现在会注意到“\ Program Files(x86)”将表示为“PROGRA~2”(或等效的短名称)。 这是我用来防止在创建批处理脚本时出现任何错误。

有关更多选项,请参阅此处。 http://www.computerhope.com/dirhlp.htm

“dir / x”的扩展
“这将显示为非8dot3文件名生成的短名称。格式为/ N,在长名称之前插入短名称。如果没有短名称,则显示空格。”