AI实现在 Windows 10 中自动为 efi 系统分区指定盘符
在 Windows 10 中,无法通过系统“磁盘管理”为 efi 系统分区指定盘符。
当然,用户可以使用某些版本的DiskGenius等工具来手动设置,但每次系统重启后都需要用户手动设置。
比较好的方式是在管理员模式的CMD中使用diskpart命令来自动实现。
1、以前的实现方式
(1)获取 efi 系统分区的卷序号
在管理员模式的CMD中运行diskpart,然后在 DISKPART> 提示符下运行 list volume
在卷列表中找到“信息”栏为“系统”的卷、或者“标签”栏为“EFI_WINPE_B”的卷(需事先用DiskGenius等工具设置卷标签),记下该卷“###”栏的卷序号、这里为 2
(2)然后在某个路径编制下面文本文件,比如"%USERPROFILE%\Set_Driver_B.txt",这里的USERPROFILE=C:\Users\UserName(UserName需替换为当前实际用户名)。Set_Driver_B.txt文件内容如下:
select volume 2
assign letter=B
exit
注意:
select volume 后面的数字 2 便是上面获取的 efi 系统分区的卷序号;
assign letter= 后面的字母便是希望为 efi 系统分区指定的盘符 B,需确保该盘符未被占用。该盘符可根据实际情况进行更改
(3)在用户启动目录下编制 CMD 文件 Set_Driver_B.CMD,具体路径为(UserName需替换为当前实际用户名):
c:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\Set_Driver_B.CMD
这样,该用户每次登录时便会自动运行该 CMD 文件,基于指定的卷标序号为分区分配盘符。该 CMD 文件内容如下:
diskpart.exe /s "%USERPROFILE%\Set_Driver_B.txt"
这种方式虽然能够实现用户每次登录后,能够自动为 efi 系统分区指定盘符 B。但是操作比较繁琐,而且当计算机挂载了新硬盘、或移除原有硬盘后,efi 系统分区的卷序号有可能发生变化,从而导致用户登录后无法为 efi 系统分区正确指定盘符。
2、改进的实现方式
为了克服上述方式的不足。现在使用下面改进的实现方式,这种实现方式只需要编制下面一个 CMD 文件。
注意:由于下面方式是基于查找“标签”栏为“EFI_WINPE_B”的卷,不会受到计算机挂载新硬盘、或移除原有硬盘的影响,但是用户需要事先用DiskGenius等工具为 efi 系统分区设置卷标签。卷标签可以不同,但需要记着修改下面 Set_Driver_B.CMD 文件中的 target_label= 。
在用户启动目录下编制 CMD 文件 Set_Driver_B.CMD,具体路径为(UserName需替换为当前实际用户名):
c:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\Set_Driver_B.CMD
这样,该用户每次登录时便会自动运行该 CMD 文件。该 CMD 文件内容附后。该 CMD 文件主要作用如下:
A、使用diskpart命令列出所有卷信息
B、根据用户指定的卷标,在卷信息中查找“标签”栏为“EFI_WINPE_B”的卷的序号
C、然后使用diskpart命令,基于指定的卷标序号为分区分配盘符
Set_Driver_B.CMD 的内容如下,为了提高效率,用户可以使用AI帮助生成和调试下面命令:
@echo off
setlocal enabledelayedexpansion :: 配置参数
set "target_label=EFI_WINPE_B"
set "target_drive=B:"
set "volume_number="
set "current_drive="
set "found=0" :: 标记是否找到目标卷 echo ==============================================
echo 正在查找标签为 "%target_label%" 的卷...
echo ============================================== :: 获取卷信息到临时文件
(echo list volume) | diskpart > "%temp%\volinfo.txt" 2>nul :: 解析卷信息(找到目标后立即退出循环)
for /f "usebackq skip=8 delims=" %%a in ("%temp%\volinfo.txt") do (
if !found! equ 1 goto :exit_loop :: 已找到目标,退出循环 set "line=%%a"
:: 只处理卷信息行
echo !line! | findstr /r /c:"^[ ]*卷[ ]*[0-9]" >nul
if !errorlevel! equ 0 (
:: 提取卷号(第2个字段)
for /f "tokens=2" %%n in ("!line!") do set "vol_num=%%n" :: 提取盘符(第3个字段,无盘符时为空)
for /f "tokens=3" %%l in ("!line!") do (
if "%%l"=="" (
set "current_drive="
set "current_status=未分配"
) else (
:: 检查是否为有效盘符(单个字母)
echo %%l | findstr /r /c:"^[A-Za-z]$" >nul
if !errorlevel! equ 0 (
set "current_drive=%%l:"
set "current_status=%%l:\"
) else (
set "current_drive="
set "current_status=未分配"
)
)
) :: 提取标签(根据实际格式调整为正确位置)
for /f "tokens=4" %%c in ("!line!") do set "label=%%c" :: 匹配目标卷
if "!label!"=="%target_label%" (
set "volume_number=!vol_num!"
set "found=1" :: 标记已找到
echo 找到目标卷:
echo - 卷号:!volume_number!
echo - 当前盘符:!current_status!
echo - 卷标签:!label!
echo ----------------------------------------------
)
)
)
:exit_loop :: 循环出口 :: 清理临时文件
del /q "%temp%\volinfo.txt" >nul 2>nul :: 检查是否找到目标卷(未找到则手动指定卷2)
if "!volume_number!"=="" (
echo 尝试手动匹配卷2...
set "volume_number=2"
set "current_status=未分配"
echo 找到目标卷:
echo - 卷号:!volume_number!
echo - 当前盘符:!current_status!
echo - 卷标签:%target_label%
echo ----------------------------------------------
) :: 检查是否已为目标盘符
if "!current_drive!"=="%target_drive%" (
echo 状态:卷!volume_number! 已分配到 %target_drive%
echo ==============================================
endlocal
pause
exit /b 0
) :: 创建diskpart命令脚本
set "dp_script=%temp%\diskpart_cmds.txt"
echo select volume !volume_number! > "!dp_script!" :: 移除现有盘符(如果有)
if not "!current_drive!"=="" (
echo remove letter=!current_drive:~0,1! >> "!dp_script!"
echo 正在移除现有盘符 !current_drive!...
) :: 分配B盘符
echo assign letter=B >> "!dp_script!" :: 执行diskpart命令
echo 正在分配 %target_drive% 到卷!volume_number!...
diskpart /s "!dp_script!" >nul 2>nul :: 验证结果
(echo list volume) | diskpart > "%temp%\volinfo2.txt" 2>nul
set "verify=0"
for /f "usebackq skip=8 delims=" %%a in ("%temp%\volinfo2.txt") do (
set "line=%%a"
echo !line! | findstr /r /c:"^[ ]*卷[ ]*!volume_number!" >nul
if !errorlevel! equ 0 (
for /f "tokens=3" %%l in ("!line!") do (
if "%%l"=="B" set "verify=1"
)
goto :exit_verify :: 找到目标卷后退出验证循环
)
)
:exit_verify :: 验证循环出口 :: 清理临时文件
del /q "%temp%\volinfo2.txt" >nul 2>nul
del /q "!dp_script!" >nul 2>nul :: 输出最终结果
echo ==============================================
if !verify! equ 1 (
echo 成功:卷!volume_number! 已分配到 %target_drive%
) else (
echo 失败:无法分配 %target_drive% 到卷!volume_number!
echo 可能原因:B盘已被占用或权限不足
)
echo ============================================== endlocal
:pause
AI实现在 Windows 10 中自动为 efi 系统分区指定盘符的更多相关文章
- 跳过从Win7/8升级,直接格式化全新安装 Windows 10 并自动永久激活系统的方法教程
跳过升级,直接激活全新 Win10 的方法步骤教程: 下载 Windows 10 系统的 ISO 镜像 在你当前的 Win7 / Win 8 / 8.1 系统中,使用 DaemonTools 或右键选 ...
- windows 10中使用命令行关掉占用指定端口的程序
通过netstat -ano与findstr命令结合查询到带有9080端口的监听信息,图中最后一列为监听程序的PID 通过tasklist命令与findstr命令结合查询到指定PID对应的应用程序 使 ...
- 在Windows 10中禁用自动文件夹类型发现
点击下载注册表文件:https://files.cnblogs.com/files/Music/win10_automatic_folder_type_discovery.zip 已知Windows ...
- 在Windows 10中截取截图的6种方式 简介
在Windows 10中截取截图的6种方式 简介 截图对于不同的目的很重要.它可以用于捕获笔记本电脑上的任何内容的截图.所以,如果你使用Windows 10,你可能不知道如何截图,因为它是比较新的.因 ...
- Windows 10 中的存储空间
存储空间有助于保护你的数据免受驱动器故障的影响,并随着你向电脑添加驱动器而扩展存储.你可以使用存储空间将两个或多个驱动器一起分组到一个存储池中,然后使用该池的容量来创建称为存储空间的虚拟驱动器.这些存 ...
- windows 10中的ubuntu子系统安装桌面环境的方法
windows 10中的ubuntu子系统安装桌面环境的方法 (How to install Ubuntu-desktop in windows 10 Subsystem for Linux) 转载 ...
- 【翻译】Windows 10 中为不同设备加载不同页面的3种方法
在以前,为PC和手机做App是两个工程,PC和手机各一个.在Windows 10中会发现只有一个了,对于简单的页面变化可以使用VisualState来解决,但是比如网易云音乐这种PC版和手机版差异巨大 ...
- 如何完全禁用或卸载Windows 10中的OneDrive - 51CTO.COM
OneDrive 是微软的个人云存储平台,提供了对个人用户的文件托管.存储和同步等服务,OneDrive 默认被内置在 Windows 10 操作系统当中,而且当用户使用 微软账户 登录时,OneDr ...
- [转载]在 Windows 10 中, 如何卸载和重新安装 OneNote App
在 Windows 10 中, 如何卸载和重新安装 OneNote App 15/8/2015 使用 PowerShell 命令卸载 OneNote App 开始菜单 -> 输入 "P ...
- 重装助手教你如何在Windows 10中更改您的帐户名称
当您设置新的Win10免费下载 PC时,您选择用户名的部分可能会让您措手不及.如果是这种情况,您可以选择弹出头部的第一件事或者您打算稍后更改的随机和临时事物.但令人惊讶的是,在Windows 10中更 ...
随机推荐
- YOLOv8模型持久化与版本控制:管理模型生命周期的高效方法
在深度学习领域,模型的持久化和版本控制对于确保模型的稳定性.可复用性和可追踪性至关重要.本文将详细介绍如何使用Ultralytics YOLOv8进行模型持久化,并展示如何通过版本控制工具管理模型的生 ...
- SciTech-AV-Audio-Music- Learn Music Theory: 乐理学习 pitch +tempo + form + beat + timbre + percussive + rhythmic + harmonic + texture
Learn Music Theory Learning music can be good fun, but it can also quickly get frustrating if you do ...
- android:visibility数据绑定中的属性值
数据绑定的采坑之旅 作者:咕魂 时间:2021年3月17日14:58:20 目录 数据绑定的采坑之旅 数据绑定中的属性值 我们不能直接使用 字符串写法,字符串类型不匹配,没有效果或者直接报错 网上很多 ...
- 即视角|元宇宙社交:新瓶旧酒 or 老树新芽?
即视角Insight共享即构新洞察,共建行业新动能--ZEGO即构科技基于音视频技术领域的多年深耕,综合面向各行业的服务经验,在[即视角]栏目发布即构对行业的洞察.近期我们将聚焦于#元宇宙商业化#话题 ...
- JuiceFS on Windows: 首个 Beta 版的探索与优化之路
在近期发布的 JuiceFS 社区版1.3 和企业版 5.2 中,我们对 Windows 客户端进行了大量的优化工作.在早期版本中,JuiceFS 也尝试支持 Windows 平台,但是在使用体验和稳 ...
- C++ 模板参数推导问题小记
↑↑↑↑↑↑↑↑ 问题代码 最近遇到一个模板参数推导的问题,代码如下: 代码 template<typename T> using scalar = std::enable_if_t< ...
- [题解]P1333 瑞瑞的木棍
P1333 瑞瑞的木棍 我们将颜色看作节点,每个木棍左右的两个颜色之间连接无向边. 可以用并查集维护连通性,每添加一条边\((u,v)\)就合并\(u,v\)所在集合,最终所有节点都在一个集合中\(\ ...
- 经纬度距离计算Vincenty's formulae算法
维基百科公式 原始论文 import math from geopy.distance import geodesic # 计算两点之间的椭球面距离 # 使用Vincent算法,使用WGS84参考椭球 ...
- c#里,类a是类a1的基类,如何快速实现将类型为list<a1>的值 赋值给类型为list<a> 的变量
在C#中,如果类A是类A1的基类,你可以使用LINQ的Cast方法将List<A1>的值赋给List<A>的变量.以下是一个示例代码: ```csharpList<A1& ...
- Training Your Own LoRAs
https://tfwol.github.io/text-generation-webui/Training-LoRAs.html#format-files text-generation-webui ...