Windows x64 版本包含以括号命名的文件夹,例如
\Program Files (x86)
,这会破坏我使用的批处理文件。问题线示例:
for %%c in (%path%) do if exist "%%c\xyz.exe" set xyz=OK
即,当它到达
)
中的(x86)
时,它会发出错误消息并退出...
我该如何解决这个问题?
不直接回答您的问题,但如果您尝试执行我认为您正在尝试的操作(即确保路径中存在文件),您可以在批处理文件中使用类似以下内容的内容。
@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
通常引用应该有效,但在这种情况下,您想要迭代由
;
分隔的所有元素。
但是您可以将
;
替换为 " "
组合,这样括号就会被引用,并且您可以迭代元素。
样本:
path=C:\temp;C:\windows;C:\Program Files (x86)
"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
)
您可以使用文件夹的短名称来实现此目的。这就是你要做的。
在 Windows 中打开命令提示符。 转到 C 驱动器(或包含程序文件夹的驱动器) 输入以下内容并
c:\> dir /x <Hit Enter>
这将返回所有文件夹的简短形式。
您现在会注意到“\Program Files (x86)”将表示为“PROGRA~2”(或等效的短名称)。 这是我在创建批处理脚本时用来防止任何错误的方法。
有关更多选项,请参阅此处。 http://www.computerhope.com/dirhlp.htm
“dir /x”的解释
“这显示为非 8dot3 文件名生成的短名称。格式为 /N,在长名称之前插入短名称。如果不存在短名称,则在其位置显示空白。”