方案
让我们假设一个应用程序安装在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 = ?
答案 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>
)
当然,这些并非万无一失,但它们可以满足我的需求。
如果您谈论的是您无法控制或使用其他语言的计算机,那么事情会变得更复杂。