无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: baby1277
打印 上一主题 下一主题

[原创] Dism离线封装脚本,无门槛封装系统,可封装为ISO/ESD/WIM/VHDX格式 v2026.1.11。

    [复制链接]
601#
发表于 4 天前 | 只看该作者
本帖最后由 yuping 于 2026-1-11 20:30 编辑

这两行代码看起来就很迷! 是担心Unattend被人弄丢了还是有什么说法?1不存在就把2复制改名为1 再把1移动到iso内部,直接复制1到iso就行了而且不用移动1,为何搞这么复杂
看的迷茫。。。 不理解啊 请教这么写有什么说法。。。

请问Bin文件夹下有Unattend和Unattend2 而且校验指纹一模一样,用一个文件实现起来是不是有困难啊

if not exist "%~dp0Setup\Bin\Unattend.xml" copy /y "%~dp0Setup\Bin\Unattend2.xml" "%~dp0Setup\Bin\Unattend.xml" >nul
move /y "%~dp0Setup\Bin\Unattend.xml" "%pan%:\iso\AutoUnattend.xml" >nul


另外,新版iso的efi启动文件变了,成了bootfix.bin  才1kb大小也是看的我一脸懵逼!efisys.bin 可是MS官方ADK里面的,前面版本一直都用这个,但是做好的arm iso总是安装时候报错无法安装

搞不懂这个boot是你自创的吗?封装的iso支持bios 和EFI双启吗.

重大发现,据我所知,arm64的官方iso 和以往的x64 iso 有个区别就是 x64的install.esd前三个是启动标志是: pe setup、windows setup、第三个忘了,第4个开始才是家庭版、专业版、教育版、企业版 等等以此类推。
然而,arm64的不同! 第一个开始就从家庭版、专业版、教育版、等等类推。。。就是说前三个重要的启动标没有,我在boot.wim发现了原来三个标在这里面。 所以封装的时候很容易不通用,即使x64封装后成功安装,
arm64封装后不一定能安装。但是有个道理说不通啊,MS官方arm64的原版你不动它肯定能安装,一修改封装立马死给你看~安装失败,官方install.esd没有前3个标都能安装,封装后当然也没有前3个标志,反而不能安装了。。就很迷离。。。。。。。。。。。。有个想法,把win11的esd前3个标提取出来 放到arm64 的esd,或者arm64封装的esd不用官方的iso壳 怕官方壳有验证。 用pe的精简壳。。。这个想法很大胆~待我验证。

这次看到更新了新的启动文件,迫不及待 要封装试一试了 会不会还像以前那样精简封装后总是无法安装
如果解决了这个大问题,你就是wuyou首屈一指登顶破纪录的大神。。。。满怀期待~ 等我好消息!这就封装去。。。

点评

Unattend.xml是在两种情况下创建的 1.在“组合设置”时创建 2.在“默认设置”时创建 假设 1.在“组合设置”时没有创建Unattend.xml 就用上备份文件Unattend2.xml 自动应答是封装的灵魂,即使用户没有设置也必须  详情 回复 发表于 4 天前
回复

使用道具 举报

602#
 楼主| 发表于 4 天前 | 只看该作者
yuping 发表于 2026-1-11 20:07
这两行代码看起来就很迷! 是担心Unattend被人弄丢了还是有什么说法?1不存在就把2复制改名为1 再把1移动到 ...

Unattend.xml是在两种情况下创建的
1.在“组合设置”时创建
2.在“默认设置”时创建
假设 1.在“组合设置”时没有创建Unattend.xml 就用上备份文件Unattend2.xml
自动应答是封装的灵魂,即使用户没有设置也必须加上去。

bootfix.bin  和 etfsboot.com 引导文件    我看了十多个ISO 都是这个文件名
efisys.bin我也不记得是在哪个镜像复制下来的了,后面再也找不到这个文件名的文件了。

脚本会优先使用ISO自带的引导文件,以保证原生兼容性。
如果iso没有引导文件再使用脚本自带的引导文件,这种情况一般是被精简过的系统镜像。

标准完整的的ESD必须包含 3个卷,单独install.esd肯定无法转为ISO。
Windows Setup Media      (ISO外壳)
Microsoft Windows PE      (boot.wim 卷1)
Microsoft Windows Setup  (boot.wim 卷2)

封装arm64镜像应该在arm64的硬件平台上使用配套的程序来封装才可以
简单的说需要封装脚本用到EXE命令都换成arm64版本的才行。
主要有这几个
oscdimg.exe  (这个有,好解决,ADK里面提取)
wimlib-imagex.exe    (这个好像也有 amd64版本的)
dism.exe   (这类都是系统自带的,在arm64的系统上运行就可以了)
MinSudo.exe   (提权用的,我都不记得在哪里下载的,有点麻烦,但可以用同类工具代替)

点评

早试过了 oscdimg.exe 、bin文件夹里面几个amd平台的换成了arm都换成arm64版本 启动文件也从官方iso复制出来放到了bin里面的同名文件。 全部操作都是在arm64系统进行。。。然而! 万事就怕这个然而。。。。 依旧  详情 回复 发表于 3 天前
回复

使用道具 举报

603#
发表于 4 天前 | 只看该作者
感谢分享
回复

使用道具 举报

604#
发表于 4 天前 来自手机 | 只看该作者
期待作者持续更新
回复

使用道具 举报

605#
发表于 3 天前 | 只看该作者
本帖最后由 yuping 于 2026-1-12 09:40 编辑
baby1277 发表于 2026-1-11 22:47
Unattend.xml是在两种情况下创建的
1.在“组合设置”时创建
2.在“默认设置”时创建
我意思你可能你理解错了 应答文件脚本自带一个默认的不就好了 为何带两个一模一样的文件存放,我思路很简单 如果我写不管你什么 组合、默认设置,该用到的时候直接复制这个脚本目录自带xml就完了,一个xml存两份一样的把我看迷糊了代码也读不通顺了。  复杂的代码我都能看懂,反而看不懂这段神奇的两行代码具体是不是在绕弯 把我思路搞乱了一时理解不了 你回复了也没读明白到底 让我捋捋先


efisys.bin 是官方iso的默认EFI启动方式 iso自带,而且官方iso一般都双启 还带有另外一个bios启动文件在boot目录下。就是说bios和EFI双启文件官方自带,同理封装的时候可用adk的命令设置启动文件,让iso只支持EFI或者支持双启


早试过了 oscdimg.exe  、bin文件夹里面几个amd平台的换成了arm都换成arm64版本 启动文件也从官方iso复制出来放到了bin里面的同名文件。 全部操作都是在arm64系统进行。。。然而!  万事就怕这个然而。。。。
依旧和x64平台下封装的一样结果,报错无法安装。
你都知道了。。。。我搞不定。全网没资料,更没有一人是拿MS的arm64原版iso修改重新打包 并且安装不报错的,至少我是没见过

标准完整的的ESD必须包含 3个卷,单独install.esd肯定无法转为ISO。
这个后半句说错了?单独install.esd 如果包含完整3个卷,那么套上iso壳子没问题啊?
x64的install.esd 完整版一般都有含有前3个卷,arm64从26h1开始就没前3个卷 能否给个install.esd win11最新版地址 带3个卷的,我研究下 套用方法。

点评

esd在这里下载的,地址确认为官方地址,注意确认版本。 https://bbs.pcbeta.com/viewthread-2057266-1-1.html  详情 回复 发表于 3 天前
回复

使用道具 举报

606#
发表于 3 天前 | 只看该作者

学习学习
回复

使用道具 举报

607#
发表于 3 天前 | 只看该作者
很不错的工具
回复

使用道具 举报

608#
 楼主| 发表于 3 天前 | 只看该作者
本帖最后由 baby1277 于 2026-1-12 22:30 编辑
yuping 发表于 2026-1-12 09:16
我意思你可能你理解错了 应答文件脚本自带一个默认的不就好了 为何带两个一模一样的文件存放,我思路很简单 ...

我测试用的esd镜像在这里下载的,地址确认为官方地址,注意确认版本。
https://bbs.pcbeta.com/viewthread-2057266-1-1.html

UUP网站下载
https://uupdump.net/

Windows 11 官方原版系统iso下载地址
https://www.microsoft.com/zh-cn/software-download/windows11


点评

最新amd64有没有28000的 就是26h1版本? 你给的连接是26200.7171 是25H2,我想找26H1的用。 第二个uup的 我试过了,没有前3个卷标志的 第三个前几天刚下载 arm64的iso,发现也是没有前3个卷标。不知amd64的是  详情 回复 发表于 3 天前
回复

使用道具 举报

609#
发表于 3 天前 | 只看该作者
baby1277 发表于 2026-1-12 22:27
我测试用的esd镜像在这里下载的,地址确认为官方地址,注意确认版本。
https://bbs.pcbeta.com/viewthre ...

最新amd64有没有28000的 就是26h1版本? 你给的连接是26200.7171 是25H2,我想找26H1的用。


第二个uup的 我试过了,没有前3个卷标志的
第三个前几天刚下载 arm64的iso,发现也是没有前3个卷标。不知amd64的是不是也这样。

第一个嘛 看来得试一下,只有esd,应该包含了前3个卷标
回复

使用道具 举报

610#
发表于 前天 11:41 | 只看该作者
感谢楼主分享
回复

使用道具 举报

611#
发表于 前天 20:07 | 只看该作者
本帖最后由 yuping 于 2026-1-13 20:53 编辑

又失败了~!
注意看: 删除 Z:\Win11_95。。。。。。   实际上Z盘是我的网络位置,早就存在。挂载的iso是F盘 ,封装的时候创建Z盘??冲突了?可能


使用Dism查看映像索引和版本信息
-----------------------------------------------------------

索引:1   Windows 11 Pro
索引:2   Windows 11 SE
索引:3   Windows 11 Pro Education
索引:4   Windows 11 Pro for Workstations
索引:5   Windows 11 Pro Single Language
索引:6   Windows 11 Education
索引:7   Windows 11 Enterprise
索引:8   Windows 11 Enterprise multi-session
索引:9   Windows 11 IoT Enterprise
索引:0   Windows 11 IoT Enterprise Subscription

-----------------------------------------------------------

映像文件位置:F:\sources\install.wim

映像文件索引:1  Windows 11 Pro

封装文件位置:C:\Users\Admin\Documents\Dism_AutoPack_Script_v20260111\Win11_95_pack.iso

-----------------------------------------------------------

请确认需要封装的版本,按回车键继续。

如需要封装其他版本请输入对应索引号:4

部署映像服务和管理工具
版本: 10.0.28000.1

正在导出映像
[==========================100.0%==========================]
操作成功完成。

正在挂载映像,请耐心等待,不要关闭本窗口。

部署映像服务和管理工具
版本: 10.0.28000.1

正在安装映像
[==========================100.0%==========================]
操作成功完成。

正在启用系统组件,已用时1分9秒,请耐心等待,不要关闭本窗口。

启用 旧版组件集合功能  LegacyComponents

部署映像服务和管理工具
版本: 10.0.28000.1

映像版本: 10.0.28000.1340

启用一个或多个功能
[==========================100.0%==========================]
操作成功完成。

启用 旧版游戏支持组件  DirectPlay

部署映像服务和管理工具
版本: 10.0.28000.1

映像版本: 10.0.28000.1340

启用一个或多个功能
[==========================100.0%==========================]
操作成功完成。

启用 SMB1组件  SMB1Protocol

部署映像服务和管理工具
版本: 10.0.28000.1

映像版本: 10.0.28000.1340

启用一个或多个功能
[==========================100.0%==========================]
操作成功完成。

正在禁用系统组件,已用时1分39秒,请耐心等待,不要关闭本窗口。

禁用 视频播放器  WindowsMediaPlayer

部署映像服务和管理工具
版本: 10.0.28000.1

映像版本: 10.0.28000.1340

禁用一个或多个功能
[==========================100.0%==========================]
操作成功完成。

禁用 防病毒程序  Windows-Defender-Default-Definitions

部署映像服务和管理工具
版本: 10.0.28000.1

映像版本: 10.0.28000.1340

禁用一个或多个功能
[==========================100.0%==========================]
操作成功完成。

正在删除预装应用,已用时2分7秒,请耐心等待,不要关闭本窗口。

删除 Z:\Win11_95\Windows\SystemApps\Microsoft.XboxGameCallableUI_cw5n1h2txyewy
删除 Z:\Win11_95\Windows\SystemApps\Microsoft.Windows.PeopleExperienceHost_cw5n1h2txyewy

正在移除可选功能,已用时2分7秒,请耐心等待,不要关闭本窗口。

移除 步骤记录器  App.StepsRecorder~~~~0.0.1.0

正在移除功能包,已用时2分19秒,请耐心等待,不要关闭本窗口。

移除 视频播放器  Microsoft-Windows-MediaPlayer-Package~31bf3856ad364e35~arm64.x86~zh-CN~10.0.28000.1
移除 视频播放器  Microsoft-Windows-MediaPlayer-Package~31bf3856ad364e35~arm64.x86~~10.0.28000.1
移除 视频播放器  Microsoft-Windows-MediaPlayer-Package~31bf3856ad364e35~arm64.x86~~10.0.28000.1340
移除 视频播放器  Microsoft-Windows-MediaPlayer-Package~31bf3856ad364e35~arm64~zh-CN~10.0.28000.1
移除 视频播放器  Microsoft-Windows-MediaPlayer-Package~31bf3856ad364e35~arm64~~10.0.28000.1
移除 视频播放器  Microsoft-Windows-MediaPlayer-Package~31bf3856ad364e35~arm64~~10.0.28000.1340

正在禁用指定服务,已用时2分19秒,请耐心等待,不要关闭本窗口。

禁用 SysMain服务  程序预读取
禁用 BITS服务  后台智能传送
禁用 UsoSvc服务  更新 Orchestrator
禁用 wuauserv服务  Windows 自动更新
禁用 WaaSMedicSvc服务  Windows 更新医生
禁用 wscsvc服务  安全中心监视
禁用 SecurityHealthService服务  安全中心客户端
禁用 WinDefend服务  防病毒程序
禁用 WdNisDrv服务  防病毒驱动
禁用 WdBoot服务  防病毒启动保护
禁用 WdFilter服务  防病毒文件保护
禁用 WdNisSvc服务  防病毒网络保护
禁用 Sense服务  防病毒主动防御

正在删除指定文件,已用时2分37秒,请耐心等待,不要关闭本窗口。

删除 Z:\Win11_95\Windows\System32\oobe\FirstLogonAnim.exe
删除 Z:\Win11_95\Windows\System32\SecurityHealthSystray.exe
删除 Z:\Win11_95\Windows\System32\SecurityHealthService.exe
删除 Z:\Win11_95\Windows\System32\SecurityHealthHost.exe
删除 Z:\Win11_95\Windows\System32\smartscreen.exe
删除 Z:\Win11_95\Windows\System32\SecurityHealthAgent.dll
删除 Z:\Win11_95\Windows\System32\SecurityHealthCore.dll
删除 Z:\Win11_95\Windows\System32\SecurityHealthUdk.dll
删除 Z:\Win11_95\Windows\System32\SecurityHealthProxyStub.dll
删除 Z:\Win11_95\Windows\System32\SecurityHealthSSO.dll
删除 Z:\Win11_95\Windows\System32\SecurityHealthSsoUdk.dll
删除 Z:\Win11_95\Windows\System32\smartscreen.dll
删除 Z:\Win11_95\Windows\System32\smartscreen.exe
删除 Z:\Win11_95\Windows\System32\smartscreenps.dll
删除 Z:\Win11_95\Windows\SysWOW64\smartscreen.dll
删除 Z:\Win11_95\Windows\SysWOW64\smartscreen.exe
删除 Z:\Win11_95\Windows\SysWOW64\smartscreenps.dll
删除 Z:\Win11_95\Program Files (x86)\Microsoft\EdgeUpdate
删除 Z:\Win11_95\Program Files\Windows Defender
删除 Z:\Win11_95\Program Files (x86)\Windows Defender
删除 Z:\Win11_95\Program Files\Windows Defender Advanced Threat Protection
删除 Z:\Win11_95\ProgramData\Microsoft\Windows Defender
删除 Z:\Win11_95\ProgramData\Microsoft\Windows Defender Advanced Threat Protection
删除 Z:\Win11_95\Windows\System32\OneDriveSetup.exe
删除 Z:\Win11_95\Windows\SysWOW64\OneDriveSetup.exe
删除 Z:\Win11_95\Windows\WinSxS\arm64_microsoft-windows-onedrive-setup_31bf3856ad364e35_10.0.28000.1_none_f2b243bcc4c52b36\OneDriveSetup.exe
删除 Z:\Win11_95\Windows\WinSxS\arm64_microsoft-windows-s..lers-onedrivebackup_31bf3856ad364e35_10.0.28000.1_none_7529a77bc8ff1bd2\OneDriveSetup.exe
删除 Z:\Win11_95\Windows\System32\Recovery\Winre.wim
删除 Z:\Win11_95\Windows\System32\Recovery\ReAgent.xml

导入文件默认关联程序

部署映像服务和管理工具
版本: 10.0.28000.1

映像版本: 10.0.28000.1340

操作成功完成。

正在保存映像,已用时2分43秒,请耐心等待,不要关闭本窗口。

部署映像服务和管理工具
版本: 10.0.28000.1

映像文件 : Z:\Win11_95.wim
映像索引 : 1
正在保存映像
[==========================100.0%==========================]
正在卸载映像
[==========================100.0%==========================]
操作成功完成。

正在复制ISO镜像外壳文件到临时目录,已用时3分49秒,请耐心等待,不要关闭本窗口。

正在导出 Windows Setup Media 已用时3分49秒

部署映像服务和管理工具
版本: 10.0.28000.1


错误: 0xc1510111

你没有装载或修改此映像的权限。
请验证你是否有读/写权限,或者使用 /ReadOnly 选项装载此映像。注意,无法使用只读权限提交对映像所做的更改。

可以在 C:\WINDOWS\Logs\DISM\dism.log 上找到 DISM 日志文件

正在导出 Microsoft Windows PE 已用时3分51秒

部署映像服务和管理工具
版本: 10.0.28000.1


错误: 3

系统找不到指定的路径。

可以在 C:\WINDOWS\Logs\DISM\dism.log 上找到 DISM 日志文件

部署映像服务和管理工具
版本: 10.0.28000.1


错误: 3

系统找不到指定的路径。

可以在 C:\WINDOWS\Logs\DISM\dism.log 上找到 DISM 日志文件

部署映像服务和管理工具
版本: 10.0.28000.1


错误: 3

系统找不到指定的路径。

可以在 C:\WINDOWS\Logs\DISM\dism.log 上找到 DISM 日志文件

正在导出 Microsoft Windows Setup 已用时3分52秒

部署映像服务和管理工具
版本: 10.0.28000.1


错误: 3

系统找不到指定的路径。

可以在 C:\WINDOWS\Logs\DISM\dism.log 上找到 DISM 日志文件
存在一个重名文件,或是找不到文件。
系统找不到指定的路径。

正在保存为ISO文件,已用时3分52秒,请耐心等待,不要关闭本窗口。
100% complete

封装完成,合计用时3分59秒,封装iso文件位置:C:\Users\Admin\Documents\Dism_AutoPack_Script_v20260111\Win11_95_pack.iso 按任意 键退出。

点评

你没有装载或修改此映像的权限。 你是如何挂载的映像?  详情 回复 发表于 前天 20:31
回复

使用道具 举报

612#
发表于 前天 20:31 | 只看该作者
yuping 发表于 2026-1-13 20:07
又失败了~!

使用Dism查看映像索引和版本信息


你没有装载或修改此映像的权限。  
你是如何挂载的映像?

点评

大概找到原因了,Z盘是网络位置,本来早就存在。脚本运行中没有判断,直接用Z挂载,结果写入不进去,没判断,强行写入并且继续执行封装流程 到后面就报错了,结果封装后的iso大小只有大概50MB ,只是一个iso空壳子,  详情 回复 发表于 前天 20:48
回复

使用道具 举报

613#
发表于 前天 20:36 | 只看该作者
谢谢分享
回复

使用道具 举报

614#
发表于 前天 20:48 | 只看该作者
本帖最后由 yuping 于 2026-1-13 20:54 编辑
sdtzsf 发表于 2026-1-13 20:31
你没有装载或修改此映像的权限。  
你是如何挂载的映像?

大概找到原因了,Z盘是网络位置,本来早就存在。脚本运行中没有判断,直接用Z挂载,结果写入不进去,没判断,强行写入并且继续执行封装流程 到后面就报错了,结果封装后的iso大小只有大概44MB ,只是一个iso空壳子,里面没有install。
回复

使用道具 举报

615#
发表于 昨天 15:06 | 只看该作者
本帖最后由 yuping 于 2026-1-14 17:42 编辑

大佬 你的脚本发现严重bug 如果Z盘已经存在,比如Z是网络 ,那么脚本创建vhdx挂载时候没有判断直接强行创建Z导致冲突 无权限,最后封包iso只有44MB



后来发现了 代码有判断。但是没考虑到一种情况: 虽然Z:盘没显示在explore资源管理器,不代表不存在。 但是作为一个服务进程 已经提前占了位置了 系统会根据需要来开启共享 挂载Z:。


即使Z盘已没有挂载,但是被网络共享占用,脚本发现不了,所以也不会自动跳过它 选择下一个可用盘符,而是继续使用Z挂载封装。问题就出在这里。




比如说,桌面上 ”我的电脑“ 图标上右键--管理---打开计算机管理--共享文件夹---共享,这里面已经有Z盘共享占了位置了 很正常Z是个局域网共享的,就像里面类似ADMIN$ 、C$、 IPC$、 Users$,我这里比别人多了一个Z,是因为局域网有共享 刚好是Z盘,与封装脚本创建的Z冲突了。

脚本虽然有遍历检测盘符,但是检测不到Z盘的,因为Z会根据情况自己挂载出来,如果没挂载出来z共享盘,当然检测不到,那么问题来了,脚本就分配到Z盘了,但是Z是有服务在 “计算机管理--共享文件夹---共享” 这里面占据了位置,强行再挂载一个Z 肯定冲突了,然而封装脚本又检测不到 不知情,所以继续运行,写入数据过程中 报错 没有权限写入什么的。。。见601楼...。 最终导致封装的iso大小只有44MB空壳子。


不知这样解释 说清楚了没有。。。。。。。



最后,解决办法: 非常简单,去掉一个字母,改一下代码直接不要Z了。临时解决一下。搞定!收工~








点评

有判断盘符是否存在的代码 for %%i in (%abc%) do if not exist %%i: set pan=%%i if not exist %pan%: 既然能挂载install.wim怎么挂载其他卷就不行了,搞不懂。 后期看下能不能修改下判断盘符存在的方法,这个Z  详情 回复 发表于 昨天 22:15
回复

使用道具 举报

616#
发表于 昨天 16:35 | 只看该作者
谢谢分享,下载下来试试。
回复

使用道具 举报

617#
 楼主| 发表于 昨天 22:15 | 只看该作者
yuping 发表于 2026-1-14 15:06
大佬 你的脚本发现严重bug 如果Z盘已经存在,比如Z是网络 ,那么脚本创建vhdx挂载时候没有判断直接强行创建 ...

有判断盘符是否存在的代码
for %%i in (%abc%) do if not exist %%i: set pan=%%i
if not exist %pan%:
既然能挂载install.wim怎么挂载其他卷就不行了,搞不懂。
后期看下能不能修改下判断盘符存在的方法,这个Z盘是不能用了,确实很多网络共享相关会用到这个盘符。

点评

if not exist 只能判断盘符存不在 也就是本地驱动器。 网络驱动器还没有检查所以可能会遇到刚好有人 带有网络共享驱动器情况,脚本会冲突。 这样会增加脚本代码体积,所以我只是临时去掉三个字母让脚本不要用 x  详情 回复 发表于 2 小时前
回复

使用道具 举报

618#
发表于 2 小时前 | 只看该作者
本帖最后由 yuping 于 2026-1-15 09:39 编辑
baby1277 发表于 2026-1-14 22:15
有判断盘符是否存在的代码
for %%i in (%abc%) do if not exist %%i: set pan=%%i
if not exist %pan%: ...

if not exist 只能判断盘符存不在 也就是本地驱动器。 网络驱动器还没有检查所以可能会遇到刚好有人 带有网络共享驱动器情况,脚本会冲突。


这样会增加脚本代码体积,所以我只是临时去掉三个字母让脚本不要用 x y z 三个盘,挂载盘从W开始 冲突情况会小很多。毕竟x盘不能用,pe专用的,y、z 有很多人网络内网有共享啊 什么的,或者虚拟机自动分配的。比如我的是pd自动占用了Z,所以去掉,还有一些大佬玩内存盘啊 、ramos之类的,R盘理所当然自然被ramos占用,不过R可以被脚本检测到因为不是网络路径,所以不用管它,脚本会自己避开R。。。


所以我在找真正可靠没有漏判的方法可以确保找到真正可用的盘符,即使网络驱动器通过各种方式占用也不会误判。

我有一段代码,现在测试阶段。你参考一下
  1. @echo off
  2. rem 检查是否以管理员身份运行
  3. net session >nul 2>&1
  4. if %errorlevel% neq 0 (
  5.     echo 需要管理员权限运行此脚本
  6.     echo 请右键点击此脚本,选择"以管理员身份运行"
  7.     echo.
  8.     pause
  9.     exit /b 1
  10. )

  11. setlocal enabledelayedexpansion

  12. rem 设置要检查的盘符列表,从W到C
  13. set "drives=W V U T S R Q P O N M L K J I H G F E D C"
  14. set "pan="

  15. rem 添加检查,确保脚本不会立即退出
  16. echo 开始检查可用盘符...
  17. echo.

  18. rem 先检查所有net use命令是否正常工作
  19. net use >nul 2>&1
  20. if errorlevel 1 (
  21.     echo 警告: net use命令可能有问题,跳过网络驱动器检查
  22. )

  23. for %%i in (%drives%) do (
  24.     echo 正在检查盘符 %%i:...
  25.    
  26.     rem 检查本地驱动器
  27.     if exist %%i:\ (
  28.         echo 盘符 %%i: 已被本地驱动器占用
  29.     ) else (
  30.         rem 检查网络驱动器
  31.         echo 检查网络驱动器映射...
  32.         net use 2>nul | findstr /i /c:"%%i:" >nul
  33.         if not errorlevel 1 (
  34.             echo 盘符 %%i: 已被网络驱动器占用
  35.         ) else (
  36.             rem 检查虚拟驱动器(subst)
  37.             echo 检查虚拟驱动器...
  38.             subst 2>nul | findstr /i /c:"%%i:" >nul
  39.             if not errorlevel 1 (
  40.                 echo 盘符 %%i: 已被虚拟驱动器占用
  41.             ) else (
  42.                 rem 如果以上都没有,则找到可用盘符
  43.                 set "pan=%%i"
  44.                 echo 找到可用盘符: %%i
  45.                 rem 找到后暂停一下再继续
  46.                 goto :found
  47.             )
  48.         )
  49.     )
  50.     echo.
  51. )

  52. rem 如果没有找到可用盘符,显示错误信息
  53. if not defined pan (
  54.     echo 错误: 没有找到可用盘符!
  55.     echo.
  56.     echo 所有盘符(Z到C)都已被占用。
  57.     echo 请检查并释放一些驱动器盘符。
  58.     echo.
  59.     echo 按任意键退出...
  60.     pause >nul
  61.     endlocal
  62.     exit /b 1
  63. )

  64. :found
  65. if defined pan (
  66.     echo.
  67.     echo ========================================
  68.     echo 最终选定的可用盘符是: %pan%
  69.     echo ========================================
  70.     echo.
  71.     echo 按任意键退出...
  72.     pause >nul
  73.     endlocal & set pan=%pan%
  74. ) else (
  75.     echo 错误: 没有找到可用盘符!
  76.     echo.
  77.     echo 按任意键退出...
  78.     pause >nul
  79.     endlocal
  80.     exit /b 1
  81. )
复制代码




回复

使用道具 举报

619#
发表于 1 小时前 | 只看该作者
学习一下
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2026-1-15 11:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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