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

[文本处理] 【已解决】批处理如何用for /f命令提取net user结果的特定字符串

我的机器上运行net user的结果如下:

[url=file://\\LUMIERE_DENG]\\LUMIERE_DENG[/url] 的用户帐户
-------------------------------------------------------------------------------
Administrator            Guest                    HelpAssistant            
lh                       SUPPORT_388945a0         
命令成功完成。

我想用for /f语句提取结果中的特定字符串或者用户名,写了如下代码:
@echo off
for /f "skip=4 delims=   tokens=1" %%a in ('net user') do echo %%a
pause

上面的delims后用的是tab键,执行结果如附件所示。
想问下为什么第一个字串会是admi呢?咋半截呢?还有为什么第二行可以显示两个用户名呢?如果我尝试在%%a后面加%%b、%%c的话却又显示不出每行的后两个用户名,这到底为什么呢?麻烦群里的达人给解释下,感谢!

[ 本帖最后由 Lumiere 于 2009-3-18 16:23 编辑 ]
1

评分人数

    • pusofalse: 感谢主动给标题加“已解决”字样。PB + 2

回复 9楼 的帖子

tokens=*和delims=的区别是什么?
http://bbs.bathome.net/viewthread.php?tid=1654#pid8870
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

搞懂了

多谢楼上各位坛友高手的解答,多谢多谢!

TOP

回复楼上的帖子

感谢楼上的朋友提供的连接,也感谢pusofalse的在其中的讲解。
现在就是代码不甚命了,想问下为什么delims后面没有指定任何分隔符呢?

TOP

回复 7楼 的帖子

for语句中的管道符为何要用尖号^进行转义?
http://bbs.bathome.net/viewthread.php?tid=1290&page=2#pid6306

/VX这俩开关咋写一块,是因为findstr命令支持这样的写法,类似的命令还有dir等。但考虑到代码的可读性,个人建议分开写。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

命令具体意思是什么

zqz00112005,多谢你,我试了一下,可以把所有用户名逐行显示出来。能帮我讲解下么?为什么你在delims的等号后面什么分隔符都没有指定呢?其什么作用呢?为什么括号里的user后面要用^,是转义需要么?如果是为什么要加转义符呢?那不是一个命令么?还有/VX这俩开关咋写一块了?

TOP

  1. @echo off
  2. for /f "skip=4 delims=" %%a in ('net user^|findstr /vx "命令成功完成。"') do for %%i in (%%a) do echo %%i
  3. pause
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

那如何能编写代码能够得到我想要的结果呢

RT,也就是说能够得到想要的几个字符串。比如我想把所有的用户名显示出来,头四行不要,最后一行“命令执行成功”也不要,请各位朋友讲解下。多谢上面三位朋友,尤其pusofalse。我在精华区看过一个新手的帖子,说多蒙你指教自己有很大提升。感谢!

TOP

原帖由 pusofalse 于 2009-3-17 17:25 发表
delims=要放在tokens=之后,否则,tokens=1这几个字符也会被当作分隔符,这里的administrator中的n就被当成了分隔符, ...

上面的这种说法有误吧。
delims放在tokens后面只是在书写上不容易出错,是种好的书写习惯,但当delims需要用空格作分割符时,则delims必须放在tokens的后面,且空格必须是在最后。
技术问题请到论坛发帖求助!

TOP

我试过不同的系统有时输出是空格,有时输出的是tab,其中有些tab会被一些编辑器替换成为空格

TOP

delims=要放在tokens=之后,否则,tokens=1这几个字符也会被当作分隔符,这里的administrator中的n就被当成了分隔符,当然只剩下admi,另外,net user返回的结果中并无跳格键。delims=可以省略,就算有也不必加上,因为空格和跳格都是默认的分隔符。
心绪平和,眼藏静谧。

TOP

返回列表