手动执行正常的startup.cmd开机脚本在系统启动时无法正确映射网络驱动器
看来你遇到的是典型的网络驱动器映射会话隔离+执行时机问题——手动跑脚本没问题,但开机自动执行就出error 85,还看不到映射的驱动器,我来帮你一步步排查解决。
首先拆解下核心问题:
- Error 85提示“设备已在使用”,但实际驱动器没挂载,本质是Windows认为这个驱动器字母已经被“预留”了(因为
/persistent:yes的持久化设置),但实际映射过程因为上下文或网络问题失败了; - 另外,通过RDP连接时,Windows的会话隔离机制会导致本地登录的驱动器映射不会同步到远程会话里,反过来也是一样。
下面是具体的解决方案,按优先级来:
1. 先清理残留的无效映射条目
先手动清理所有现有网络驱动器映射,避免系统残留无效的占用记录:
打开命令提示符(管理员模式),执行:
net use * /delete /yes
然后重启电脑,再观察开机脚本的执行情况。如果还是报错,说明问题不在残留条目,继续往下看。
2. 修改脚本,先检查再映射(避免重复执行报错)
把你的startup.cmd改成带判断逻辑的版本,只有当驱动器不存在时才执行映射,这样就能避免重复映射导致的error 85,还能明确知道映射是否成功:
@echo off echo Now mounting your disk drives :: 检查H盘是否存在,不存在再映射 if not exist h:\ ( net use h: \\celerra03\exelhome\rbaumann /persistent:yes echo Mapped drive H: successfully ) else ( echo Drive H: is already mapped or reserved ) :: 检查S盘 if not exist s:\ ( net use s: \\celerra03\sas\stat /persistent:yes echo Mapped drive S: successfully ) else ( echo Drive S: is already mapped or reserved ) :: 检查Z盘 if not exist Z:\ ( net use Z: \\fsmain\userdata\_home /persistent:yes echo Mapped drive Z: successfully ) else ( echo Drive Z: is already mapped or reserved ) echo Done mounting your disk drives timeout 5
修改后重启,看脚本输出的提示,就能知道每个驱动器的状态了。
3. 解决RDP会话的隔离问题
当你通过RDP连接目标PC时,Windows会创建一个独立的用户会话,Startup文件夹的脚本是在本地登录会话执行的,映射的驱动器不会自动同步到RDP会话里。解决方法有两个:
- 方法一:把脚本放到任务计划程序里,设置为“用户登录时运行”,并且确保任务的安全选项是当前用户,同时勾选“在用户登录时运行”(不管是本地还是RDP登录都会触发)。具体步骤:
- 打开任务计划程序→创建基本任务;
- 名称填“映射网络驱动器”,触发器选“当用户登录时”;
- 操作选“启动程序”,浏览选择你的
startup.cmd; - 最后勾选“打开此任务属性的对话框”,在“常规”选项卡勾选“以最高权限运行”(如果需要),然后保存。
- 方法二:在RDP客户端的设置里,勾选“本地资源”→“更多”→“驱动器”,但这个是把本地PC的驱动器重定向到远程会话,不是映射目标PC的网络驱动器,适合临时用。
4. 排查网络执行时机问题
Windows 10的快速启动功能会让系统在开机时跳过部分初始化,可能导致脚本执行时网络还没完全连接,映射失败但持久化设置让系统认为驱动器已被占用。可以关闭快速启动试试:
- 打开控制面板→电源选项→选择电源按钮的功能;
- 点击“更改当前不可用的设置”,取消勾选“启用快速启动(推荐)”;
- 保存更改后重启测试。
另外,也可以在脚本开头添加网络等待逻辑,确保网络连接正常后再执行映射:
@echo off :: 等待网络连接正常 :WAIT_FOR_NETWORK ping -n 1 8.8.8.8 | findstr "TTL=" >nul if errorlevel 1 ( echo Waiting for network connection... timeout /t 2 /nobreak >nul goto WAIT_FOR_NETWORK ) echo Now mounting your disk drives :: 后面的映射逻辑和之前的一样...
5. 检查UAC权限影响
如果你的用户账户启用了UAC,Startup文件夹的脚本默认是标准用户权限执行,而你手动打开命令提示符可能用的是管理员权限,这会导致映射的驱动器在不同权限上下文里不可见。可以尝试:
右键点击startup.cmd→属性→兼容性→勾选“以管理员身份运行此程序”,然后重启测试。但要注意,这样可能会弹出UAC提示,如果你不想看到提示,可以在本地组策略编辑器里添加脚本到“用户配置→Windows设置→脚本(登录/注销)”里,这样执行时不会弹UAC。
按照上面的步骤一步步试,应该能解决你的问题。
备注:内容来源于stack exchange,提问作者fireblood

