如何根据运行批处理文件的Windows版本设置Windows批处理变量?

时间:2013-10-03 17:35:05

标签: windows batch-file

方案

让我们假设一个应用程序安装在Windows XP和Windows 7上,适用于单个用户,并且它安装在这两个操作系统中的以下目录中:

Windows XP:

C:\Documents and Settings\<user_name>\Local Settings\Application Data\<target-folder>

Windows 7:

C:\Users\<user_name>\AppData\Local\<target-folder>

我想创建一个批处理脚本,将目标文件夹目录分配给脚本中的变量。

问题

根据运行脚本的Windows版本,在批处理脚本中设置变量的最简单,最健壮的方法是什么?

示例答案

set targetDir = ?

4 个答案:

答案 0 :(得分:2)

ver | find "XP" >nul && (
    set "TargetDir=%USERPROFILE%\Local Settings\Application Data\[target-folder]"
) || (
    set "TargetDir=%USERPROFILE%\AppData\Local\[target-folder]"
)
echo "%TargetDir%"

答案 1 :(得分:1)

有一个名为%USERPROFILE%%APPDATA%的环境变量,可用于查询配置文件路径名称。

通常使用 WMIC 来查询这样的信息,它适用于XP(专业但不是家用),Vista,Windows 7,Windows 8和服务器。例如,要使用操作系统名称:

WMIC OS GET caption

如果您想要更多信息,请使用名称而不是标题。您可以要求其他数据,如OSArchitecture,它会告诉您32位或64位。您可以组合查询,如下所示:

WMIC OS GET caption, osarchitecture, muilanguages

您可以获得WMIC OS的完整列表,但是阅读WMIC上的文档,它可以执行许多不同的查询和任务,例如列出所有用户。但真正的问题是,您可以使用以下方式查询OTHER用户环境:

wmic ENVIRONMENT
:: and
wmic /user user ENVIRONMENT

最后但同样重要的是,即使版本无法为您提供线索,您也可以使用

IF EXISTS C:\Users

确定文件夹是否存在。

答案 2 :(得分:0)

经过进一步研究后,我发现这个resource既简单又健壮,因为它可以检测所有版本的Windows而不仅仅是windows xp或windows 7。

答案 3 :(得分:-1)

答案是“这取决于”。

例如,我控制工作中的计算机设置,我们的Windows 7计算机都是64位,因此我可以检查C:\Program Files (x86)

所以,我这样做:

IF EXIST "C:\Program Files (x86)" (
  SET TargetDir=C:\Users\<user_name>\AppData\Local\<target-folder>
) ELSE (
  SET TargetDir=C:\Documents and Settings\<user_name>\<target-folder>
)

当然,这些并非万无一失,但它们可以满足我的需求。

如果您谈论的是您无法控制或使用其他语言的计算机,那么事情会变得更复杂。

相关问题