驱动导出 重装系统前导出当前系统驱动 - 全文内容:
显示技术博客列表驱动导出 重装系统前导出当前系统驱动
超短链接dism内置命令两种方法导出驱动对比:
| 场景 | 命令示例 | 适用情况 |
|---|---|---|
| 当前系统正常 | dism /online /export-driver /destination:D:\Backup | 系统能正常启动和登录 |
| 当前系统损坏 | dism /Image:D:\ /export-driver /destination:E:\Backup | 系统蓝屏、无法启动 |
驱动导出到D盘.bat 脚本内容:
@echo off
REM utf8编码设置
REM chcp 65001 >nul
REM GB2312编码设置
chcp 936 >nul
title 驱动导出工具 - 支持正常系统与WinPE
REM 声明变量
set "DRV_TOOL=驱动导出工具"
set "NORMAL_MODE=0"
set "DEST_PATH="
set "OFFLINE_DRIVE="
set "DEFAULT_PATH=D:\DriversBackup"
:begin
cls
echo ===============================================
echo %DRV_TOOL% v1.0
echo ===============================================
echo.
REM 判断是否为WinPE环境(多种检测方法)
set "IS_PE=0"
REM 方法1:检查是否存在WinPE专用文件
if exist "%SystemRoot%\System32\winpe.exe" set "IS_PE=1"
if exist "%SystemRoot%\System32\startnet.cmd" set "IS_PE=1"
REM 方法2:检查注册表项(PE环境通常没有完整注册表)
reg query "HKLM\SYSTEM\CurrentControlSet\Control" | findstr /i "WinPE" >nul 2>nul
if %errorlevel%==0 set "IS_PE=1"
REM 方法3:检查系统盘盘符(正常系统一般在C:,且不能是X:或RAMDisk)
if /i "%SystemDrive%"=="X:" set "IS_PE=1"
if "%IS_PE%"=="1" (
echo [环境检测] 当前运行在 WinPE 环境中。
echo -----------------------------------------------
set "NORMAL_MODE=0"
) else (
echo [环境检测] 当前运行在 正常Windows 环境中。
echo -----------------------------------------------
set "NORMAL_MODE=1"
)
echo.
REM 询问用户导出模式
:select_mode
echo 请选择驱动导出模式:
echo.
if "%NORMAL_MODE%"=="1" (
echo [1] 在线导出 - 备份当前系统的所有第三方驱动 (推荐)
echo.
)
echo [2] 离线导出 - 备份已损坏/无法启动系统的驱动(需要进入WinPE)
echo [3] 退出
echo.
set /p "choice=请输入数字 (1/2/3): "
if "%choice%"=="1" (
if "%NORMAL_MODE%"=="1" (
call :export_online
) else (
echo 当前环境不支持在线导出!请重新选择。
ping -n 2 127.0.0.1 >nul
goto select_mode
)
) else if "%choice%"=="2" (
call :export_offline
) else if "%choice%"=="3" (
exit /b
) else (
echo 输入无效,请重新选择。
ping -n 2 127.0.0.1 >nul
goto select_mode
)
pause
goto begin
REM ========== 在线导出函数 ==========
:export_online
cls
echo ===============================================
echo 在线驱动导出模式
echo ===============================================
echo 说明:将备份当前运行系统的所有第三方驱动。
echo.
echo 默认路径: %DEFAULT_PATH%
echo 提示:直接回车将使用默认路径,或输入自定义路径
echo.
:get_dest_online
set "DEST_PATH="
set /p "DEST_PATH=请输入备份保存路径 [%DEFAULT_PATH%]: "
REM 如果用户直接回车,使用默认路径
if "%DEST_PATH%"=="" (
set "DEST_PATH=%DEFAULT_PATH%"
echo 已使用默认路径: %DEST_PATH%
)
REM 去除路径中的首尾引号
set "DEST_PATH=%DEST_PATH:"=%"
REM 创建目标文件夹(如果不存在)
if not exist "%DEST_PATH%" (
echo 目标路径不存在,正在创建...
mkdir "%DEST_PATH%" 2>nul
if errorlevel 1 (
echo 创建失败!请确认路径有效或有足够权限。
echo.
goto get_dest_online
)
)
echo.
echo 正在导出驱动,请稍候...
echo -----------------------------------------------
REM 执行在线导出命令
dism /online /export-driver /destination:"%DEST_PATH%"
if %errorlevel%==0 (
echo.
echo ========== 导出成功! ==========
echo 驱动已保存至: %DEST_PATH%
) else (
echo.
echo ========== 导出失败! ==========
echo 可能原因:
echo 1. 权限不足(请以管理员身份运行此脚本)
echo 2. 目标路径不可写或磁盘空间不足
echo 3. 系统组件异常
)
echo.
echo 按任意键返回主菜单...
pause >nul
goto begin
REM ========== 离线导出函数 ==========
:export_offline
cls
echo ===============================================
echo 离线驱动导出模式
echo ===============================================
echo 说明:
echo 1. 适用于已损坏/无法启动的系统(当前在WinPE中运行)
echo 2. 需要知道目标系统安装盘的位置
echo 3. 建议先确认盘符(可打开资源管理器查看)
echo.
REM 列出当前可用盘符
echo [当前可用盘符列表]
echo -----------------------------------------------
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 (
if exist %%i:\ (
if exist %%i:\Windows\System32 (
echo %%i: - 可能包含Windows系统
) else if exist %%i:\ (
echo %%i: - 普通分区
)
)
)
echo -----------------------------------------------
echo 提示:损坏的系统分区通常仍能看到 Windows 文件夹
echo.
:get_offline_drive
set /p "OFFLINE_DRIVE=请输入目标系统安装盘盘符 (只输入字母,如 D): "
set "OFFLINE_DRIVE=%OFFLINE_DRIVE:~0,1%"
REM 验证输入是否合法
if "%OFFLINE_DRIVE%"=="" (
echo 盘符不能为空!
goto get_offline_drive
)
REM 检查盘符是否为字母
echo %OFFLINE_DRIVE%| findstr /r "^[A-Za-z]$" >nul
if errorlevel 1 (
echo 请输入单个字母 (A-Z)!
goto get_offline_drive
)
REM 转为大写
for %%i in (A B 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 (
if /i "%OFFLINE_DRIVE%"=="%%i" set "OFFLINE_DRIVE=%%i"
)
REM 检查目标盘符是否存在
if not exist %OFFLINE_DRIVE%:\ (
echo 盘符 %OFFLINE_DRIVE%: 不存在!请重新输入。
goto get_offline_drive
)
REM 检查是否存在系统必要的标志(可选,但不强制)
if not exist %OFFLINE_DRIVE%:\Windows\System32\config\SOFTWARE (
echo 警告:%OFFLINE_DRIVE%: 可能不包含完整的Windows系统注册表
echo 如果确认这是目标系统盘,请按 Y 继续,否则按 N 重新输入。
set /p "confirm=是否继续? (Y/N): "
if /i not "!confirm!"=="Y" (
goto get_offline_drive
)
)
echo.
echo 默认保存路径: %DEFAULT_PATH%
echo 提示:直接回车将使用默认路径,或输入自定义路径
echo.
:get_dest_offline
set "DEST_PATH="
set /p "DEST_PATH=请输入备份保存路径 [%DEFAULT_PATH%]: "
REM 如果用户直接回车,使用默认路径
if "%DEST_PATH%"=="" (
set "DEST_PATH=%DEFAULT_PATH%"
echo 已使用默认路径: %DEST_PATH%
)
set "DEST_PATH=%DEST_PATH:"=%"
REM 创建目标文件夹
if not exist "%DEST_PATH%" (
echo 目标路径不存在,正在创建...
mkdir "%DEST_PATH%" 2>nul
if errorlevel 1 (
echo 创建失败!请确认路径有效。
echo.
goto get_dest_offline
)
)
echo.
echo 正在导出离线系统驱动...
echo 目标系统盘符: %OFFLINE_DRIVE%:
echo 保存路径: %DEST_PATH%
echo -----------------------------------------------
REM 执行离线导出命令(注意:Dism 需要支持离线处理)
dism /image:%OFFLINE_DRIVE%:\ /export-driver /destination:"%DEST_PATH%"
if %errorlevel%==0 (
echo.
echo ========== 导出成功! ==========
echo 驱动已从系统盘 %OFFLINE_DRIVE%: 导出至 %DEST_PATH%
) else (
echo.
echo ========== 导出失败! ==========
echo 可能原因:
echo 1. 目标路径权限不足
echo 2. 指定盘符不是有效的Windows安装
echo 3. Dism 服务未正确初始化
echo 4. 当前PE环境可能缺少 Dism 组件
)
echo.
echo 按任意键返回主菜单...
pause >nul
exit@echo off
REM utf8编码设置
REM chcp 65001 >nul
REM GB2312编码设置
chcp 936 >nul
title 驱动导出工具 - 支持正常系统与WinPE
REM 声明变量
set "DRV_TOOL=驱动导出工具"
set "NORMAL_MODE=0"
set "DEST_PATH="
set "OFFLINE_DRIVE="
set "DEFAULT_PATH=D:\DriversBackup"
:begin
cls
echo ===============================================
echo %DRV_TOOL% v1.0
echo ===============================================
echo.
REM 判断是否为WinPE环境(多种检测方法)
set "IS_PE=0"
REM 方法1:检查是否存在WinPE专用文件
if exist "%SystemRoot%\System32\winpe.exe" set "IS_PE=1"
if exist "%SystemRoot%\System32\startnet.cmd" set "IS_PE=1"
REM 方法2:检查注册表项(PE环境通常没有完整注册表)
reg query "HKLM\SYSTEM\CurrentControlSet\Control" | findstr /i "WinPE" >nul 2>nul
if %errorlevel%==0 set "IS_PE=1"
REM 方法3:检查系统盘盘符(正常系统一般在C:,且不能是X:或RAMDisk)
if /i "%SystemDrive%"=="X:" set "IS_PE=1"
if "%IS_PE%"=="1" (
echo [环境检测] 当前运行在 WinPE 环境中。
echo -----------------------------------------------
set "NORMAL_MODE=0"
) else (
echo [环境检测] 当前运行在 正常Windows 环境中。
echo -----------------------------------------------
set "NORMAL_MODE=1"
)
echo.
REM 询问用户导出模式
:select_mode
echo 请选择驱动导出模式:
echo.
if "%NORMAL_MODE%"=="1" (
echo [1] 在线导出 - 备份当前系统的所有第三方驱动 (推荐)
echo.
)
echo [2] 离线导出 - 备份已损坏/无法启动系统的驱动(需要进入WinPE)
echo [3] 退出
echo.
set /p "choice=请输入数字 (1/2/3): "
if "%choice%"=="1" (
if "%NORMAL_MODE%"=="1" (
call :export_online
) else (
echo 当前环境不支持在线导出!请重新选择。
ping -n 2 127.0.0.1 >nul
goto select_mode
)
) else if "%choice%"=="2" (
call :export_offline
) else if "%choice%"=="3" (
exit /b
) else (
echo 输入无效,请重新选择。
ping -n 2 127.0.0.1 >nul
goto select_mode
)
pause
goto begin
REM ========== 在线导出函数 ==========
:export_online
cls
echo ===============================================
echo 在线驱动导出模式
echo ===============================================
echo 说明:将备份当前运行系统的所有第三方驱动。
echo.
echo 默认路径: %DEFAULT_PATH%
echo 提示:直接回车将使用默认路径,或输入自定义路径
echo.
:get_dest_online
set "DEST_PATH="
set /p "DEST_PATH=请输入备份保存路径 [%DEFAULT_PATH%]: "
REM 如果用户直接回车,使用默认路径
if "%DEST_PATH%"=="" (
set "DEST_PATH=%DEFAULT_PATH%"
echo 已使用默认路径: %DEST_PATH%
)
REM 去除路径中的首尾引号
set "DEST_PATH=%DEST_PATH:"=%"
REM 创建目标文件夹(如果不存在)
if not exist "%DEST_PATH%" (
echo 目标路径不存在,正在创建...
mkdir "%DEST_PATH%" 2>nul
if errorlevel 1 (
echo 创建失败!请确认路径有效或有足够权限。
echo.
goto get_dest_online
)
)
echo.
echo 正在导出驱动,请稍候...
echo -----------------------------------------------
REM 执行在线导出命令
dism /online /export-driver /destination:"%DEST_PATH%"
if %errorlevel%==0 (
echo.
echo ========== 导出成功! ==========
echo 驱动已保存至: %DEST_PATH%
) else (
echo.
echo ========== 导出失败! ==========
echo 可能原因:
echo 1. 权限不足(请以管理员身份运行此脚本)
echo 2. 目标路径不可写或磁盘空间不足
echo 3. 系统组件异常
)
echo.
echo 按任意键返回主菜单...
pause >nul
goto begin
REM ========== 离线导出函数 ==========
:export_offline
cls
echo ===============================================
echo 离线驱动导出模式
echo ===============================================
echo 说明:
echo 1. 适用于已损坏/无法启动的系统(当前在WinPE中运行)
echo 2. 需要知道目标系统安装盘的位置
echo 3. 建议先确认盘符(可打开资源管理器查看)
echo.
REM 列出当前可用盘符
echo [当前可用盘符列表]
echo -----------------------------------------------
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 (
if exist %%i:\ (
if exist %%i:\Windows\System32 (
echo %%i: - 可能包含Windows系统
) else if exist %%i:\ (
echo %%i: - 普通分区
)
)
)
echo -----------------------------------------------
echo 提示:损坏的系统分区通常仍能看到 Windows 文件夹
echo.
:get_offline_drive
set /p "OFFLINE_DRIVE=请输入目标系统安装盘盘符 (只输入字母,如 D): "
set "OFFLINE_DRIVE=%OFFLINE_DRIVE:~0,1%"
REM 验证输入是否合法
if "%OFFLINE_DRIVE%"=="" (
echo 盘符不能为空!
goto get_offline_drive
)
REM 检查盘符是否为字母
echo %OFFLINE_DRIVE%| findstr /r "^[A-Za-z]$" >nul
if errorlevel 1 (
echo 请输入单个字母 (A-Z)!
goto get_offline_drive
)
REM 转为大写
for %%i in (A B 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 (
if /i "%OFFLINE_DRIVE%"=="%%i" set "OFFLINE_DRIVE=%%i"
)
REM 检查目标盘符是否存在
if not exist %OFFLINE_DRIVE%:\ (
echo 盘符 %OFFLINE_DRIVE%: 不存在!请重新输入。
goto get_offline_drive
)
REM 检查是否存在系统必要的标志(可选,但不强制)
if not exist %OFFLINE_DRIVE%:\Windows\System32\config\SOFTWARE (
echo 警告:%OFFLINE_DRIVE%: 可能不包含完整的Windows系统注册表
echo 如果确认这是目标系统盘,请按 Y 继续,否则按 N 重新输入。
set /p "confirm=是否继续? (Y/N): "
if /i not "!confirm!"=="Y" (
goto get_offline_drive
)
)
echo.
echo 默认保存路径: %DEFAULT_PATH%
echo 提示:直接回车将使用默认路径,或输入自定义路径
echo.
:get_dest_offline
set "DEST_PATH="
set /p "DEST_PATH=请输入备份保存路径 [%DEFAULT_PATH%]: "
REM 如果用户直接回车,使用默认路径
if "%DEST_PATH%"=="" (
set "DEST_PATH=%DEFAULT_PATH%"
echo 已使用默认路径: %DEST_PATH%
)
set "DEST_PATH=%DEST_PATH:"=%"
REM 创建目标文件夹
if not exist "%DEST_PATH%" (
echo 目标路径不存在,正在创建...
mkdir "%DEST_PATH%" 2>nul
if errorlevel 1 (
echo 创建失败!请确认路径有效。
echo.
goto get_dest_offline
)
)
echo.
echo 正在导出离线系统驱动...
echo 目标系统盘符: %OFFLINE_DRIVE%:
echo 保存路径: %DEST_PATH%
echo -----------------------------------------------
REM 执行离线导出命令(注意:Dism 需要支持离线处理)
dism /image:%OFFLINE_DRIVE%:\ /export-driver /destination:"%DEST_PATH%"
if %errorlevel%==0 (
echo.
echo ========== 导出成功! ==========
echo 驱动已从系统盘 %OFFLINE_DRIVE%: 导出至 %DEST_PATH%
) else (
echo.
echo ========== 导出失败! ==========
echo 可能原因:
echo 1. 目标路径权限不足
echo 2. 指定盘符不是有效的Windows安装
echo 3. Dism 服务未正确初始化
echo 4. 当前PE环境可能缺少 Dism 组件
)
echo.
echo 按任意键返回主菜单...
pause >nul
exit