Windows x64版本包含以括号命名的文件夹,如“\ Program Files(x86)”,这会破坏我使用的批处理文件。问题专栏的一个例子:
for %% c in(%path%)do do“%% c \ xyz.exe”set xyz = OK
即。当它到达“(x86)”中的“)”时,它会输出一条错误信息并退出......
有关如何解决此问题的任何想法? 这是一个相当大的批处理文件,而且我没有时间用更好的语言重写它...
非常感谢:)
答案 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,在长名称之前插入短名称。如果没有短名称,则显示空格。”