[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[网络连接] 【已解决】NET USE在批处理for循环中无法使用的问题

本帖最后由 SeanJuicer 于 2024-3-1 21:20 编辑
  1. set H_error=
  2. for /f "tokens=2 delims=。 " %%i in ('net use H: \\192.168.1.100\app "/user:admin" "admin" /persistent:no ^| findstr [0123456789]') do (
  3.     set H_error=%%i
  4. )
  5. echo. %H_error%
  6. pause
复制代码
这段代码意在遇到net use错误时输出错误代码,但是使用中永远会提示错误代码
  1. 发生系统错误 1219:
  2. 不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接
复制代码
命令从for循环中单独拎出来就可以顺利映射

希望各位大神给点指点,感谢!

已经没有任何映射或者其它用户挂载,并且在执行前已经net use * /del /y

用自增变量计数或者在for里写goto跳转出来,也是同样的结果,计数也是显示循环了一次而已
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 2# qixiaobin0715
  1. do echo,%%i
复制代码
请问,只是do那里不同吗?我需要set 成一个变量,后面再输出

TOP

回复 2# qixiaobin0715


    好的,我现在就试一下,感谢

TOP

回复 2# qixiaobin0715


    好像还是提示1219

TOP

回复 2# qixiaobin0715


    我又去测试了一下不同机器,有些电脑又是没问题的,我下午再检查一下,可能不是代码的问题。

先谢谢。

TOP

本帖最后由 SeanJuicer 于 2024-3-1 16:22 编辑

回复 7# czjt1234

运行此命令
  1. @echo off
  2. set H_error=
  3. for /f "tokens=2 delims=。 " %%i in ('net use H: \\192.168.0.7\111 "/user:admin" "Aa123456" /persistent:no 2^>^&1 ^| findstr [0123456789]') do (
  4.     set H_error=%%i
  5. )
  6. echo,%H_error%
  7. pause
复制代码
环境:
Windows 11 专业工作站版 22631.3155
全部都是自行封装的WIN11系统纯净镜像,运行没问题的是同一个虚拟机母盘早些月份封装

FOR循环挂载无错机器:
最后安装的补丁:2024-适用于 Windows 11 Version 23H2 的 02 累积更新,适合基于 x64 的系统 (KB5034765)
待更新的补丁:2024-适用于 Windows 11 Version 23H2 的 02 累积更新,适合基于 x64 的系统 (KB5034848)
FOR循环有问题的机器:
已安装全部最新补丁

打印结果
  1. 发生系统错误 1219。
  2. 不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接。中断与此服务器或共享资源的所有连接,然后再试一次。
复制代码
有问题的机器去掉这段代码
  1. 2^>^&1 ^| findstr [0123456789]
复制代码
就可以挂载成功。

如果按照原始代码执行,哪怕我故意填入错误的账号和密码,出错信息都是1219,而去掉上面那段代码,打印的错误会如实出现,比如86,密码错误。

有问题的镜像重做系统3次,问题都存在,而其它不论是win10,还是我早些时候封装的win11,都无此问题,可以顺利挂载顺利读出错误代码

我所做的测试全部都会在前面执行net use * /del /y,因为不执行清除,挂载是成功的。
.
.
.
.

TOP

我准备更新这台没问题的win11那个补丁,看下问题是否会复现,真是奇了怪了。

TOP

更新补丁到最新,没有复现问题!

TOP

回复 14# czjt1234


    不会,那台服务器是群晖,同一个账号已经在其它电脑重复登陆过了,是不限制SMB同时登陆的。

TOP

一会下班回家,在家里做个系统连接家里的服务器,看看问题是否存在。再回溯一下封装的母盘,看看哪一步的优化对这个代码运行产生影响了。

TOP

测试了,虚拟机内直接安装系统连接自己的服务器也是不行的,看来是这次封装优化了某个地方导致了这个问题,我检查一下。

TOP

回复 18# czjt1234


    感谢如此认真对待,我已经发现问题所在,我现在整理一下

TOP

本帖最后由 SeanJuicer 于 2024-3-1 20:33 编辑

回复 18# czjt1234


首先,你的测试简直太精准了,直击问题要害。

其次,答案正如你所料,是两个账户访问同一个会话的原因。


这个问题发生的原因是,最新镜像有个需求,就是以管理员身份运行的程序需要访问到映射的网络磁盘

于是我做了一个优化项目:管理员访问网络驱动器


因为我每封装一次镜像都会在虚拟机内打快照,按照与上次优化的项目逐一对比,发现了这一项,才想起来。



还原优化项目,问题迎刃而解。


引用微软官方的一篇相关的文档:
当 UAC 配置为提示输入凭据时,从提升的提示中无法使用映射驱动器

摘取一段内容:
原因
启用 UAC 后,系统会在用户登录时创建两个登录会话。 这两个登录会话相互链接。 一个会话表示提升会话期间的用户,另一个会话表示你在用户权限最低的情况下运行的另一个会话。


这个代码以普通权限创建了一个连接,又想以管理员身份创建连接,所以就提示1219了。

问题找到了,那么为何去掉
  1. findstr [0123456789]
复制代码
就可以映射了呢?我的需求似乎还是没有解决,哈哈

.
.
.

TOP

回复 8# Batcher


    顺便感谢一下管理员,帮助过我好多次了哈哈

TOP

本帖最后由 SeanJuicer 于 2024-3-1 21:06 编辑

我的代码头部有setlocal enabledelayedexpansion变量延迟

会导致这个问题,去掉就可以挂载不出现1219了,关闭延迟就好了,我测试一下去

TOP

返回列表