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

问题描述 投票:0回答:3

Windows x64 版本包含以括号命名的文件夹,例如

\Program Files (x86)
,这会破坏我使用的批处理文件。问题线示例:

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

即,当它到达

)
中的
(x86)
时,它会发出错误消息并退出...

我该如何解决这个问题?

windows path batch-file 64-bit parentheses
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

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
投票

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

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

   c:\> dir /x  <Hit Enter>

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

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

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

“dir /x”的解释
“这显示为非 8dot3 文件名生成的短名称。格式为 /N,在长名称之前插入短名称。如果不存在短名称,则在其位置显示空白。”

© www.soinside.com 2019 - 2024. All rights reserved.