找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 5922|回复: 15

[文本处理] 求助 自动挂载ESP分区后如何获取盘符

[复制链接]
发表于 2026-8-22 09:32:17 | 显示全部楼层 |阅读模式
本人小白,网上抄来一段代码,可自动挂载 ESP 隐藏分区,在不同电脑其分配的盘符不同
求助各位老师:如何输出或获取已挂载的盘符

  1. for /f "usebackq tokens=2 delims= " %%i in (` echo list disk ^| diskpart ^| find "磁盘" `) do (
  2.     echo select disk=%%i > "%temp%\mount_esp.txt"
  3.     echo list partition >> "%temp%\mount_esp.txt"
  4.     for /f "usebackq tokens=2 delims= " %%j in (` diskpart /s "%temp%\mount_esp.txt" ^| findstr /i "系统 system" `) do (
  5.         echo select disk=%%i >> "%temp%\mount_esp.txt"
  6.         echo select partition=%%j >> "%temp%\mount_esp.txt"
  7.         echo assign >> "%temp%\mount_esp.txt"
  8.         diskpart /s "%temp%\mount_esp.txt" >nul
  9.         del /q /f "%temp%\mount_esp.txt"
  10. ) )
复制代码
发表于 2026-8-22 15:02:38 | 显示全部楼层
如果 winPE 中文系统已自动挂载 esp 分区并被分配了盘符,可用以下代码获取其 esp 分区盘符...

test.bat
  1. @echo off &setlocal &(echo,list volume&echo,exit)>#.$
  2. for /f "tokens=3 delims= " %%a in ('diskpart /s #.$^|findstr /ic:" fat32 " /c:" 系统 " ') do set "ltr=%%a"
  3. if "%ltr:~1,1%"=="" (echo,ESP分区已有盘符=%ltr%) else echo,ESP分区没有盘符
  4. del /q "#.$" &pause&exit/b
复制代码
发表于 2026-8-22 15:14:27 | 显示全部楼层
之前挂载ESP的命令(前贴)我在PE和Windows11下都试了,是正确的,为什么还要选择这么麻烦的方法?

Snipaste_2026-08-22_15-12-29.png


  1. @echo off
  2. set "ESPDrive="

  3. for %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D) do if not defined ESPDrive if not exist "%%i:\" (
  4.     mountvol %%i: /s >nul 2>&1 && set "ESPDrive=%%i:"
  5. )

  6. if not defined ESPDrive echo ESP mount failed.&pause&exit /b
  7. echo ESP=%ESPDrive%

  8. pause
复制代码


发表于 2026-8-22 21:02:15 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-8-22 21:17 编辑

再给一个版本如下,补充2楼代码如未发现 esp 分区盘符会自动配置其盘符的处理方案...

test.bat (用于没有 wmic, powershell 组件的 winPE 系统)
  1. @echo off &setlocal &(echo,list volume&echo,exit)>#.$
  2. for /f "tokens=2,3 delims= " %%a in ('diskpart /s #.$^|findstr /ic:" fat32 " /c:" 系统 " ') do set "v=%%a" &set "ltr=%%b"
  3. if "%ltr:~1,1%"=="" (echo,ESP分区已配置盘符=%ltr%&goto:[endESP]) else setlocal enabledelayedexpansion
  4. for /f "delims=" %%a in ('fsutil fsinfo drives') do set "allD=%%a" &set "allD=!allD:* =!"
  5. for %%d in (Z Y X W V U T S R Q P O N M L K J I H G F) do if /i "!allD:%%d=!"=="!allD!" (
  6.    (echo,select volume %v%&echo,assign letter=%%d&echo,exit)>#.$
  7.    diskpart /s #.$ >nul
  8.    echo,已配置ESP分区盘符=%%d:&goto:[endESP] )
  9. :[endESP]
  10. del /q "#.$" &pause&exit/b
复制代码

 楼主| 发表于 2026-8-23 05:11:46 | 显示全部楼层
aloha20200628 发表于 2026-8-22 15:02
如果 winPE 中文系统已自动挂载 esp 分区并被分配了盘符,可用以下代码获取其 esp 分区盘符...

test.bat

谢谢老师,闪退
 楼主| 发表于 2026-8-23 05:13:18 | 显示全部楼层
77七 发表于 2026-8-22 15:14
之前挂载ESP的命令(前贴)我在PE和Windows11下都试了,是正确的,为什么还要选择这么麻烦的方法?

谢谢老师,mountvol 在我笔记本(Win11 home版)无效
发表于 2026-8-23 09:29:38 | 显示全部楼层

如果不在 winPE 系统下(例如如 win11 Home 系统)运行2楼的 test.bat,则须在 cmd 管理员窗口中运行 test.bat,或用右键选择 '以管理员身份运行'...
发表于 2026-8-23 09:32:55 | 显示全部楼层
766266yyn 发表于 2026-8-23 05:13
谢谢老师,mountvol 在我笔记本(Win11 home版)无效

AI:

老式 WinPE(XP/Server 2003 那个时代):微软明确记录过 mountvol /s 不工作。
现代 WinPE / 第三方 PE:完全可能正常工作,具体取决于 PE 的版本、组件和制作方式。
微PE:你已经实际验证正常,所以对你这个环境而言无需担心。
正常 Windows 10/11:微软当前 mountvol 文档明确支持 /s,作用就是把 EFI 系统分区挂载到指定盘符。



修改1楼代码:

  1. @echo off
  2. for /f "usebackq tokens=2 delims= " %%i in (`echo list disk ^| diskpart ^| find "磁盘"`) do (
  3.         >"%temp%\mount_esp.txt" echo select disk=%%i
  4.         >>"%temp%\mount_esp.txt" echo list partition
  5.         for /f "usebackq tokens=2 delims= " %%j in (`diskpart /s "%temp%\mount_esp.txt" ^| findstr /i "系统 system"`) do (
  6.                 >>"%temp%\mount_esp.txt" echo select disk=%%i
  7.                 >>"%temp%\mount_esp.txt" echo select partition=%%j
  8.                 >>"%temp%\mount_esp.txt" echo assign
  9.                 >>"%temp%\mount_esp.txt" echo detail partition
  10.                 for /f "tokens=1-4" %%a in ('diskpart /s "%temp%\mount_esp.txt"') do (
  11.                         if "%%a"=="*" (set "ESPDrive=%%d:") else set "ESPDrive=%%c:"
  12.                 )
  13.                 call echo ESP盘符:%%ESPDrive%%
  14.                 del "%temp%\mount_esp.txt"
  15.         )
  16. )
  17. pause
复制代码
 楼主| 发表于 2026-8-23 17:44:07 | 显示全部楼层
aloha20200628 发表于 2026-8-23 09:29
如果不在 winPE 系统下(例如如 win11 Home 系统)运行2楼的 test.bat,则须在 cmd 管理员窗口中运行 tes ...

已经是管理员身份运行的
 楼主| 发表于 2026-8-23 17:47:55 | 显示全部楼层

这个好,一箭双雕,自动分配并输出盘符
 楼主| 发表于 2026-8-24 22:44:55 | 显示全部楼层

77七老师,可不可以写一个或修改成也适用于 Legacy 引导模式的隐藏引导分区
发表于 2026-8-25 01:14:58 | 显示全部楼层
本帖最后由 77七 于 2026-8-25 09:02 编辑
766266yyn 发表于 2026-8-24 22:44
77七老师,可不可以写一个或修改成也适用于 Legacy 引导模式的隐藏引导分区 ...


AI写的,只测试了 UEFI windows11(经楼主测试,win7不可用

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set "f=%temp%\bootpart.txt"

  4. rem 正常Windows直接取SystemDrive;PE下重新寻找Windows分区
  5. set "win=%SystemDrive%"
  6. reg query HKLM\SYSTEM\CurrentControlSet\Control\MiniNT >nul 2>&1 && set "win="

  7. if not defined win for %%d 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 (
  8.     if not defined win if exist "%%d:\Windows\System32\ntoskrnl.exe" if exist "%%d:\Windows\explorer.exe" set "win=%%d:"
  9. )

  10. if not defined win echo 未找到Windows分区&pause&exit /b

  11. rem 获取Windows所在磁盘编号
  12. (echo select volume !win:~0,1!&echo detail volume)>"%f%"

  13. for /f "tokens=1-3" %%a in ('diskpart /s "%f%" ^| findstr /r /i /c:"磁盘 [0-9]" /c:"Disk [0-9]"') do (
  14.     if "%%a"=="*" (set "disk=%%c") else set "disk=%%b"
  15. )

  16. if not defined disk echo 未找到Windows所在磁盘&goto end
  17. rem GPT:直接找System分区
  18. (echo select disk !disk!&echo list partition)>"%f%"
  19. for /f "tokens=2" %%a in ('diskpart /s "%f%" ^| findstr /i "系统 System"') do (
  20.     set "part=%%a"
  21.     set "mode=UEFI"
  22. )

  23. rem MBR:寻找Active分区
  24. if not defined part for /f "tokens=2" %%a in ('diskpart /s "%f%" ^| findstr /r /i /c:"^[ ]*分区 [0-9]" /c:"^[ ]*Partition [0-9]"') do (
  25.     (echo select disk !disk!&echo select partition %%a&echo detail partition)>"%f%"
  26.     diskpart /s "%f%" | findstr /i /c:"活动: 是" /c:"Active: Yes" >nul && (
  27.         set "part=%%a"
  28.         set "mode=Legacy"
  29.     )
  30. )

  31. if not defined part echo 未找到引导分区&goto end

  32. rem 看该分区是否已经有盘符
  33. (echo select disk !disk!&echo select partition !part!&echo detail partition)>"%f%"
  34. for /f "tokens=1-4" %%a in ('diskpart /s "%f%" ^| findstr /l /i /c:"* 卷" /c:"* Volume"') do (
  35.     if exist "%%d:\" set "BootDrive=%%d:"
  36. )

  37. rem 没有盘符则自动分配
  38. if not defined BootDrive for %%L in (Z Y W V U T S R Q P O N M L K J I H G F E D) do (
  39.     if not defined BootDrive if not exist "%%L:\" (
  40.         (echo select disk !disk!&echo select partition !part!&echo assign letter=%%L)>"%f%"
  41.         diskpart /s "%f%" >nul
  42.         if exist "%%L:\" set "BootDrive=%%L:"
  43.     )
  44. )

  45. echo Windows=!win!
  46. echo Mode=!mode!
  47. echo BootDrive=!BootDrive!

  48. :end
  49. del "%f%" 2>nul
  50. pause
复制代码
 楼主| 发表于 2026-8-25 05:59:46 | 显示全部楼层
77七 发表于 2026-8-25 01:14
AI写的,只测试了 UEFI windows11

谢谢老师,PE下、正常系统10/11通过,正常系统--win7失败---未找到引导分区
发表于 2026-8-25 08:51:40 | 显示全部楼层
766266yyn 发表于 2026-8-25 05:59
谢谢老师,PE下、正常系统10/11通过,正常系统--win7失败---未找到引导分区

AI修改:(没条件测试)
test.rar (1.34 KB)
 楼主| 发表于 2026-8-25 10:45:59 | 显示全部楼层
77七 发表于 2026-8-25 08:51
AI修改:(没条件测试)

谢谢老师
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-9-12 11:08

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表