5

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

for %%c in (%path%) do if exist "%%c\xyz.exe" set xyz=OK

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

有想法该怎么解决这个吗?这是一个相当大的批处理文件,atm 我没有时间用更好的语言重写它......

非常感谢 :)

4

3 回答 3

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
于 2011-03-21T20:04:35.087 回答
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
)
于 2011-03-21T20:12:46.700 回答
2

为此,您可以使用文件夹的短名称。这就是你的做法。

在 Windows 中打开命令提示符。转到 C 驱动器(或您拥有程序文件夹的驱动器)键入以下内容并

   c:\> dir /x  <Hit Enter>

这将返回所有文件夹的缩写形式。

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

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

Exlpanation for "dir /x"
"这显示为非 8dot3 文件名生成的短名称。格式是 /N 的格式,短名称插入长名称之前。如果不存在短名称,则在其中显示空白地方。”

于 2011-03-21T19:43:20.713 回答