Board logo

标题: [系统相关] 批处理如何扫描硬盘分区中所有系统并确定系统版本 [打印本页]

作者: freesoft00    时间: 2014-3-21 12:53     标题: 批处理如何扫描硬盘分区中所有系统并确定系统版本

如题,硬盘中安装有多系统,都是win系统,如何判读各系统所在分区并判读系统版本
作者: DAIC    时间: 2014-3-21 13:24

如果是手工判断,你一般如何判断某个分区安装了操作系统以及操作系统是什么版本?
作者: freesoft00    时间: 2014-3-21 15:23

手工就是查看分区是否有windows目录,如果有windows目录,并且还有%windir%\system32\slmgr.vbs这类vista、win7、win8特有的文件说明就是nt6系统,如果还有windows\SysWOW64目录说明就是64位nt6系统。否则的话就是nt5系统,nt5系统和nt6系统的具体再分,我不知道如何做,不知道是否有命令可以显示文件版本,xp的文件一般信息是5.1.2600.5512,win7的是6.1.7601.17514
作者: apang    时间: 2014-3-21 16:24

可不可以通过注册表挂载其它分区的windows\system32\config\software文件判断呢?
作者: DAIC    时间: 2014-3-21 16:50

手工就是查看分区是否有windows目录,如果有windows目录,并且还有%windir%\system32\slmgr.vbs这类vista、win7、win8特有的文件说明就是nt6系统,如果还有windows\SysWOW64目录说明就是64位nt6系统。否则的话就是nt5系统
  1. @echo off
  2. for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  3.     if exist %%i:\windows (
  4.         if exist "windows\system32\slmgr.vbs" (
  5.             if exist "windows\SysWOW64" (
  6.                 echo 64bit NT6
  7.             ) else (
  8.                 echo 32bit NT6
  9.             )
  10.         ) else (
  11.             echo NT5
  12.         )
  13.     )
  14. )
  15. pause
复制代码

作者: DAIC    时间: 2014-3-21 16:53

不知道是否有命令可以显示文件版本,xp的文件一般信息是5.1.2600.5512,win7的是6.1.7601.17514
  1. wmic datafile where "Name='C:\\Windows\\notepad.exe'" get Version /value
复制代码

作者: freesoft00    时间: 2014-3-21 20:59

可不可以通过注册表挂载其它分区的windows\system32\config\software文件判断呢?

兄弟这个方法比较好。导出其中的系统版本的键值就知道版本了。如果方便可否写一下具体的实现代码。
wmic 的方法不想用,因为有些环境无法使用wmic,不具有通用性,比如pe环境。
谢谢了!
作者: apang    时间: 2014-3-22 21:22

  1. @echo off
  2. set "v1=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
  3. set "v2=HKLM\My_Hive\Microsoft\Windows NT\CurrentVersion"
  4. set "Hive=windows\system32\config\software"
  5. for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.     if /i "%%i:"=="%SystemDrive%" (
  7.         for /f "tokens=1,2*" %%a in ('reg query "%v1%"') do (
  8.             if /i "%%a"=="ProductName" (
  9.                 echo,分区:%%i
  10.                 echo,系统:%%c&echo,
  11.             )
  12.         )
  13.     ) else if exist "%%i:\%Hive%" (
  14.         reg load "HKLM\My_Hive" "%%i:\%Hive%" >nul
  15.         for /f "tokens=1,2*" %%a in ('reg query "%v2%"') do (
  16.             if /i "%%a"=="ProductName" (
  17.                 echo,分区:%%i
  18.                 echo,系统:%%c&echo,
  19.             )
  20.         )
  21.         reg unload "HKLM\My_Hive" >nul
  22.     )
  23. )
  24. pause
复制代码

作者: wlishihua    时间: 2021-8-4 12:07

回复 8# apang
此段代码适应W10各个版本,不识W7,将w7识别为W10 pro 专业 版
作者: wlishihua    时间: 2021-8-14 07:14

本帖最后由 wlishihua 于 2021-8-14 07:18 编辑

根据系统 EXE文件来识别,如果是BIOS引导,那必定C盘有boot文件夹,没有就是UEFI引导,
先以memtest.exe文件确定引导:if EXIST C:\boot\memtest.exe (goto :BIOS) else (goto :UEFI)
:BIOS
:UEFI
再确定是win7 还是win10:
if EXIST C:\Windows\System32\WSReset.exe (goto :W10) else (goto :w7)
:W10
:w7
当然没有系统,没有分区的新硬盘不在考虑识别中,因为没有系统
有没人高手合并一下?




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2