807979023 发表于 2018-10-25 11:33:07

如何用批处理判断c盘系统版本?

如何用批处理判断c盘系统版本?
比如在pe中,如何用批处理判断c盘系统是w10?w7?xp?

tools241 发表于 2018-10-25 11:56:14

本帖最后由 tools241 于 2018-10-25 12:17 编辑

1. XPE/XP 不含 \Windows\System32\Boot\winload.exe

2. 检查 \Windows\WinSxs -- Win7 含 *.7600.*, Win8 含 *.9200.*, Win8.1 含 *.9600.* ;
    上列 都不含便是Win10

请参考:
    精简DLL档(适用于10PE,8.1PE,8PE).BAT -- 批处理 ==>
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=408425

nttwqz 发表于 2018-10-25 11:57:23

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=397824

807979023 发表于 2018-10-25 13:55:42

谢谢楼上两位指导,已解决。

@echo off
color 1f
echo.
echo.
echo c盘系统版本:
echo.
set vc=0
if not exist "c:\boot\bcd" echo winxp && set vc=1
if exist "c:\Windows\WinSxs\*.7600.*" echo win7 && set vc=1
if exist "c:\Windows\WinSxs\*.9200.*" echo win8 && set vc=1
if exist "c:\Windows\WinSxs\*.9600.*" echo win8.1 && set vc=1
if "%vc%" == "0" echo win10
pause >nul
--------------------------------------------------------
请问nttwqz大师,只查看多系统版本,能不能修改一下在正常系统中也可运行?
@echo off
color 1f

:: 完成日期:2017-9-15
if /i not "%systemdrive%"=="X:" if not exist X:\Windows\System32\config\system color 1f & echo 仅支持 WinPE 环境运行... & echo; & pause & exit

rem 查找所有系统盘盘符、系统名称、类型、版本号
setlocal enabledelayedexpansion
for /d %%a in (C D E F G H I J K L M N O P Q R S T U V W Y Z) do if exist %%a:\Windows\System32\config\system set /a n+=1 && set "sysdrive-!n!=%%a:"
cls
echo.
echo 系统列表
echo;─┬──┬─┬──┬─────────────────────────────
for /l %%b in (1,1,!n!) do (
        if /i not "%systemdrive%"=="!sysdrive-%%b!" (
                set reg_load_system_%%b=HKLM\temp_system_%%b
                set reg_load_software_%%b=HKLM\temp_software_%%b
                rem 加载注册表 SYSTEM 到HKLM\temp_system_%%b,SOFTWARE到HKLM\temp_software_%%b
                reg load "!reg_load_system_%%b!" !sysdrive-%%b!\Windows\System32\config\SYSTEM >nul 2>&1
                reg load "!reg_load_software_%%b!" !sysdrive-%%b!\Windows\System32\config\SOFTWARE >nul 2>&1
                rem 查询系统类型
                if exist !sysdrive-%%b!\Windows\SysWOW64 (set osarch-%%b=x64) else if not exist !sysdrive-%%b!\Windows\SysWOW64 (set osarch-%%b=x86) else set "osarch-%%b=???"
        )
        rem 查询系统版本号,
        for /f "tokens=3" %%c in ('reg query "!reg_load_system_%%b!\Setup\Service Reporting API\Components\CoreOS" /v Version 2^>nul ^| findstr /i "REG_SZ"') do set ver-%%b=%%c
        rem 如果上面未查询到版本号,则在此处查询
        if not defined ver-%%b (
                for /f "tokens=3" %%f in ('reg query "!reg_load_software_%%b!\Microsoft\Windows NT\CurrentVersion" /v CurrentVersion 2^>nul ^| findstr /i "REG_SZ"') do set ver-%%b=%%f
                for /f "tokens=3" %%g in ('reg query "!reg_load_software_%%b!\Microsoft\Windows NT\CurrentVersion" /v CurrentBuildNumber 2^>nul ^| findstr /i "REG_SZ"') do set ver-%%b=!ver-%%b!.%%g
        )
        rem 查询系统名称
        for /f "tokens=3*" %%d in ('reg query "!reg_load_software_%%b!\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul ^| findstr /i "REG_SZ"') do set name-%%b=%%d %%e
        rem 卸载加载的注册表
        reg unload "!reg_load_system_%%b!" >nul 2>&1
        reg unload "!reg_load_software_%%b!" >nul 2>&1
        echo; %%b│盘符│!sysdrive-%%b!│系统│!name-%%b! !osarch-%%b!        ^(!ver-%%b!^)
        if %%b==!n! (echo;─┴──┴─┴──┴─────────────────────────────) else (
                echo;─┼──┼─┼──┼─────────────────────────────
        )
)
pause >nul
页: [1]
查看完整版本: 如何用批处理判断c盘系统版本?