2011-03-21 53 views
5

的Windows x64的版本包含有类似“\ Program Files文件(x86)的”括号命名的文件夹,这打破了我使用批处理文件。一个问题行的一个示例:的Windows 64和“括号中的路径”批处理文件的问题

在(%路径%)%% c不是否存在 “%%Ç\ xyz.exe” 设定XYZ = OK

即,当它到达 “)” 中的“ (86)”它提出了一个错误信息并退出...

关于如何解决此问题的任何想法? 这是一个相当大的批处理文件,ATM我不必重写它在一个更好的语言的时候......

非常感谢:)

+0

你确定你复制的非常精确'FOR'指令? – 2011-03-21 18:59:47

+0

@PA是的,我可以重现错误。我无法想象一个快速解决方案。 – 2011-03-21 19:12:08

+0

@PA是的我只将可执行文件的名称更改为xyz ... – stereochilly 2011-03-21 19:29:29

回答

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 
+0

好主意......我会试试这个以及... – stereochilly 2011-03-21 20:23:32

+0

工程奇迹...... :) 我可以问一下所有%%〜$:这意味着什么?非常神秘......;) – stereochilly 2011-03-21 21:05:19

+0

@stereo这是所有文件中的用法。在控制台输入/? – 2011-03-21 22:12:03

2

您可以使用文件夹的短名称为这个目的。这是你如何做到的。

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

c:\> dir /x <Hit Enter> 

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

现在你会发现,“\程序文件(x86)”将被表示为“PROGRA〜2”(或等效的简称)。 这是我用来在创建批处理脚本时防止任何错误。

欲了解更多选项,请看这里。 http://www.computerhope.com/dirhlp.htm

Exlpanation为“DIR/X”
“这将显示为非8dot3文件名产生的短名称,格式为的那个/ N与长名字之前插入的短名称。如果没有短名称存在,空白显示在其位置。“

+0

OP的PATH环境变量不会使用短名称 – 2011-03-21 19:46:06

+0

难道这样的方法会导致他不得不遍历所有的文件夹,而不是仅仅通过“Path”环境变量所持有的文件夹? – BrMcMullin 2011-03-21 19:47:14

+0

这是一种手动方法,击败了“for声明“和一般运行批处理文件... – stereochilly 2011-03-21 19:54:03

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 
) 
+0

不错......谢谢:) – stereochilly 2011-03-21 20:23:09