如何在Windows PE中通过Batch脚本调用diskpart批量移除所有驱动器号?
解决方案:WinPE下用Batch脚本自动移除所有驱动器号
嗨,我刚好有个完美适配你需求的方案——纯Batch脚本,不用PowerShell,借助diskpart的脚本模式和noerr参数就能搞定WinPE里的批量驱动器号移除。
核心思路
diskpart支持通过脚本文件批量执行命令,加上noerr参数后,即使遇到错误(比如分区没有驱动器号、操作不允许)也会继续执行后续命令,不会中断整个流程,非常适合这种边界性的批量操作场景。
完整Batch脚本
@echo off setlocal enabledelayedexpansion :: 临时文件路径定义 set "list_part_script=%temp%\list_partitions.txt" set "part_output=%temp%\partition_results.txt" set "clean_script=%temp%\clean_drives.txt" :: 生成diskpart脚本,用于列出所有分区 echo list partition > "%list_part_script%" :: 执行脚本并保存输出 diskpart /s "%list_part_script%" > "%part_output%" :: 解析分区输出,生成清理驱动器号的diskpart脚本 for /f "skip=9 tokens=1,4" %%a in ('type "%part_output%" ^| findstr /r "^[ ]*[0-9]"') do ( :: 只处理有驱动器号的分区 if not "%%b"=="" ( echo select partition %%a >> "%clean_script%" echo remove letter=%%b noerr >> "%clean_script%" ) ) :: 如果生成了清理脚本,执行它 if exist "%clean_script%" ( echo 正在移除所有已分配的驱动器号... diskpart /s "%clean_script%" ) :: 清理临时文件 del "%list_part_script%" 2>nul del "%part_output%" 2>nul del "%clean_script%" 2>nul endlocal echo 操作完成:已尝试移除所有可访问的驱动器号
脚本说明
- 临时文件处理:先创建一个diskpart脚本用来列出系统所有分区,执行后把结果保存到临时文件,方便后续解析。
- 分区解析:跳过diskpart输出的前9行表头信息,提取有驱动器号的分区号和对应字母。
- 生成清理命令:对每个带驱动器号的分区,生成
select partition [编号]和remove letter=[字母] noerr命令,noerr确保遇到错误不中断。 - 执行与清理:运行生成的清理脚本,最后删除所有临时文件,保持环境干净。
WinPE环境注意事项
- WinPE默认自带diskpart工具,无需额外安装组件。
- 由于WinPE环境默认拥有管理员权限,直接运行脚本即可,无需额外提权。
- 对于系统分区或被锁定的分区,
remove命令会失败,但noerr参数会让脚本继续处理其他分区,不影响整体流程。
内容的提问来源于stack exchange,提问作者BNT
相关产品推荐
相关产品推荐

