If statement 将DOS环境变量设置为if语句中的另一个环境变量

If statement 将DOS环境变量设置为if语句中的另一个环境变量,if-statement,set,dos,If Statement,Set,Dos,这看起来很简单,但结果却是一种痛苦 在Windows 7上,我可以将以下内容粘贴到命令提示符中,并将其设置为%ProgramFiles%或%ProgramFiles(x86)%: 但是,在Windows XP上,使用相同和其他方法,我无法得到相同的结果: E:\>%comspec% /c if exist "%programfiles%" (set "ProgramFiles(x32)=%programfiles%") else (set "ProgramFiles(x32)=%progr

这看起来很简单,但结果却是一种痛苦

在Windows 7上,我可以将以下内容粘贴到命令提示符中,并将其设置为
%ProgramFiles%
%ProgramFiles(x86)%

但是,在Windows XP上,使用相同和其他方法,我无法得到相同的结果:

E:\>%comspec% /c if exist "%programfiles%" (set "ProgramFiles(x32)=%programfiles%") else (set "ProgramFiles(x32)=%programfiles(x86)%")
E:\Program was unexpected at this time.

E:\>%comspec% /c if exist "%programfiles%" (set ProgramFiles(x32)=%programfiles%) else (set ProgramFiles(x32)=%programfiles(x86)%)
E:\Program was unexpected at this time.

E:\>%comspec% /c if exist "%programfiles%" (set "ProgramFiles(x32)"="%programfiles%") else (set "ProgramFiles(x32)=%programfiles(x86)%")
E:\Program was unexpected at this time.

E:\>%comspec% /c if exist "%programfiles%" (set ProgramFiles(x32)="%programfiles%") else (set ProgramFiles(x32)=%programfiles(x86)%)
"E:\Program Files") was unexpected at this time.

E:\>%comspec% /c if exist "%programfiles%" (set ProgramFiles(x32)=%%programfiles%%) else (set ProgramFiles(x32)=%programfiles(x86)%)
%E:\Program was unexpected at this time.
set ProgramFiles(x32)=%ProgramFiles%在Win XP和7上都可以直接从命令行正常工作

我错过了什么


顺便说一句,我真希望微软能让%ProgramFiles%成为32位程序的目录。我看不出必须执行此检查的逻辑,如果是这样,32位程序将位于同一位置,而不考虑操作系统的位数。

除了.bat文件语法之外,几乎任何东西都可以编程。伊姆霍

但是“您缺少的”是.bat语法将“程序”和“文件”视为两个独立的单词(而不是路径的一部分)

简单的解决方法:

  cd c:\
  dir/x pro*

在您的情况下,您可能会有一个“progra~1”(用于“程序文件”)和“progra~2”(用于“程序文件(x86)”。只需相应地修改您的.bat文件:)

@dbenham非常深入,并且非常感谢我在另一个问题中的启示,解决了这个问题-

是的,但是“%comspec%/c如果存在”%programfiles%“(设置”程序文件(x32)=%ProgramFiles%”其他(设置%ProgramFiles(x32)=%ProgramFiles(x86)%”)按预期在Win7上工作&“E:\>%comspec%/c如果存在“%ProgramFiles%”(设置程序文件(x32)=%ProgramFiles%”其他(设置程序文件(x32)=%ProgramFiles(x86)%”E:\ProgramFiles)此时意外。“显然是把这两个词放在一起……而且,也不确定你的建议如何表达命令的目的。我需要设置一个单独的变量,具体取决于运行它的电脑的位。
  cd c:\
  dir/x pro*