[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

如题,硬盘中安装有多系统,都是win系统,如何判读各系统所在分区并判读系统版本

本帖最后由 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
当然没有系统,没有分区的新硬盘不在考虑识别中,因为没有系统
有没人高手合并一下?

TOP

回复 8# apang
此段代码适应W10各个版本,不识W7,将w7识别为W10 pro 专业 版

TOP

  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
复制代码

TOP

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

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

TOP

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

TOP

手工就是查看分区是否有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
复制代码

TOP

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

TOP

手工就是查看分区是否有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

TOP

如果是手工判断,你一般如何判断某个分区安装了操作系统以及操作系统是什么版本?

TOP

返回列表