【发布时间】:2017-05-09 16:11:29
【问题描述】:
对不起,如果我让标题听起来有点混乱。但这就是我遇到的情况。
代码:
for /f "skip=1 tokens=1,3 delims=," %u in ('wmic /node:%CompName% COMPUTERSYSTEM GET USERNAME') do set userfound=%u
输出:
:\windows\system32>set userfound= domain\username
:\windows\system32>set userfound=
代码结果图片: Code Results
原代码:
wmic /node:%CompName% COMPUTERSYSTEM GET USERNAME
它的输出:
Username
domain\username
我想要做的是让一个变量只等于用户名,而没有为批处理文件添加域。稍后我会将该用户名保存为一个变量,该变量将保存在许多连接的批处理文件中。
我还想确保 for /f 不会循环(即使它是一个循环命令)不会用任何内容替换我的 var。
所以我不知道在这里编码什么。
想要的结果
[out put of code]=username
【问题讨论】:
-
你需要在cmd.exe的上下文中查找“延迟变量扩展”的概念
-
使用
SET ECHO OFF然后再次运行 FOR 命令。当您想要返回提示时,请使用SET ECHO ON。您可能希望将其放入 .bat 文件脚本中。如果是这样,请确保将 FOR 循环 % 字符加倍。 -
这在设置回显的情况下分批发生。结果仍显示为域\用户名
-
回显变量 %Userfound% 时的最终结果基本上是 ECHO 关闭。
-
@MikeNakis,延迟扩展不是这里的解决方案,因为在
for /F循环中没有读取任何变量;问题是wmic的Unicode 输出和for /F对ANSI 文本的不良转换; npocmaka's answer 为此提供了完美的解决方案,使用两个嵌套的for /F循环来消除转换伪影...
标签: batch-file for-loop wmic