在DOS语句中将DOS环境变量设置为另一个环境变量

时间:2012-08-16 04:45:02

标签: if-statement set dos

这看起来很简单,但结果却是如此痛苦。

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

%comspec% /c if exist "%programfiles%" (set "ProgramFiles(x32)=%programfiles%") else (set %ProgramFiles(x32)=%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.

设置ProgramFiles(x32)=%programfiles%可以直接从Win XP&上的命令行运行。 7。

我错过了什么?

作为旁注,我真的希望微软将%ProgramFiles%作为32位程序的目录。我无法看到必须进行此检查的逻辑,当这样的情况下,无论操作系统的位数如何,32位程序都将位于同一位置。

2 个答案:

答案 0 :(得分:0)

你最好用任何编程而不是.bat文件语法。 IMHO。

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

简单的解决方法:

  cd c:\
  dir/x pro*

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

答案 1 :(得分:0)

@dbenham非常深入,非常感谢我在另一个问题上的启蒙,也解决了这个问题 - Different behaviour of DOS Environment setting, in if statement, in DOS prompt as compared to Windows Shortcut