0

设想

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

视窗XP:

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

Windows 7的:

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

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

问题

根据脚本在哪个版本的窗口中运行,在批处理脚本中设置变量的最简单和最可靠的方法是什么?

示例答案

set targetDir = ?
4

4 回答 4

2
ver | find "XP" >nul && (
    set "TargetDir=%USERPROFILE%\Local Settings\Application Data\[target-folder]"
) || (
    set "TargetDir=%USERPROFILE%\AppData\Local\[target-folder]"
)
echo "%TargetDir%"
于 2013-10-03T18:44:27.470 回答
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 上的文档,它可以执行许多不同的查询和任务,例如列出所有用户。但真正的问题是您可以查询其他用户环境:

wmic ENVIRONMENT
:: and
wmic /user user ENVIRONMENT

最后但并非最不重要的一点是,如果甚至版本都无法为您提供可以使用的线索

IF EXISTS C:\Users

确定文件夹是否存在。

于 2013-10-03T18:41:22.750 回答
0

经过进一步研究,我发现这个资源既简单又强大,因为它检测所有版本的 Windows,而不仅仅是 windows xp 或 windows 7。

于 2013-10-03T23:11:13.220 回答
-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>
)

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

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

于 2013-10-03T18:10:43.800 回答