Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据批处理文件运行的windows版本设置windows批处理变量?_Windows_Batch File - Fatal编程技术网

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

如何根据批处理文件运行的windows版本设置windows批处理变量?,windows,batch-file,Windows,Batch File,场景 假设一个应用程序安装在Windows XP和Windows 7上,供单个用户使用,并安装在这两个操作系统中的以下目录中: Windows XP: C:\Documents and Settings\<user_name>\Local Settings\Application Data\<target-folder> 答案是“视情况而定” 例如,我控制工作中的计算机设置,我们的Windows 7计算机都是64位的,因此我可以检查C:\ProgramFiles(x86

场景

假设一个应用程序安装在Windows XP和Windows 7上,供单个用户使用,并安装在这两个操作系统中的以下目录中:

Windows XP:

C:\Documents and Settings\<user_name>\Local Settings\Application Data\<target-folder>
答案是“视情况而定”

例如,我控制工作中的计算机设置,我们的Windows 7计算机都是64位的,因此我可以检查
C:\ProgramFiles(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>
)
WMIC OS GET caption, osarchitecture, muilanguages
如果存在“C:\Program Files(x86)”(
设置TargetDir=C:\Users\\AppData\Local\
)否则(
SET TargetDir=C:\Documents and Settings\\
)
当然,这些不是万无一失的,但它们满足了我的需要


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

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

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

WMIC OS GET caption
如果您想了解更多信息,请选择名称而不是标题。您可以询问其他数据,例如OSArchitecture,这些数据会告诉您它是32位还是64位。您可以组合查询,如下所示:

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>
)
WMIC OS GET caption, osarchitecture, muilanguages
您可以使用WMIC操作系统获取完整列表,但阅读WMIC上的文档它可以执行许多不同的查询和任务,例如列出所有用户。但真正的问题是,您可以通过以下方式查询其他用户环境:

wmic ENVIRONMENT
:: and
wmic /user user ENVIRONMENT
最后但并非最不重要的一点是,即使是这个版本也不能给你们一个你们可以使用的线索

IF EXISTS C:\Users

确定文件夹是否存在。

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

这至少很简单,如果不是很可靠的话。试探性地试图“弄清楚”你使用的是什么操作系统,就像你说的,充满了危险。恩多的解决方案似乎是一种更为稳健的方式来确定您是否使用XP。我认为您错过了按钮。:)
ver | find "XP" >nul && (
    set "TargetDir=%USERPROFILE%\Local Settings\Application Data\[target-folder]"
) || (
    set "TargetDir=%USERPROFILE%\AppData\Local\[target-folder]"
)
echo "%TargetDir%"