Board logo

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

作者: Lumiere    时间: 2009-3-17 16:59     标题: 【已解决】批处理如何用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 编辑 ]
作者: pusofalse    时间: 2009-3-17 17:25

delims=要放在tokens=之后,否则,tokens=1这几个字符也会被当作分隔符,这里的administrator中的n就被当成了分隔符,当然只剩下admi,另外,net user返回的结果中并无跳格键。delims=可以省略,就算有也不必加上,因为空格和跳格都是默认的分隔符。
作者: 9zhmke    时间: 2009-3-17 17:45

我试过不同的系统有时输出是空格,有时输出的是tab,其中有些tab会被一些编辑器替换成为空格
作者: 随风    时间: 2009-3-17 19:37

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

上面的这种说法有误吧。
delims放在tokens后面只是在书写上不容易出错,是种好的书写习惯,但当delims需要用空格作分割符时,则delims必须放在tokens的后面,且空格必须是在最后。
作者: Lumiere    时间: 2009-3-18 09:01     标题: 那如何能编写代码能够得到我想要的结果呢

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

  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
复制代码

作者: Lumiere    时间: 2009-3-18 09:59     标题: 命令具体意思是什么

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

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

/VX这俩开关咋写一块,是因为findstr命令支持这样的写法,类似的命令还有dir等。但考虑到代码的可读性,个人建议分开写。
作者: Lumiere    时间: 2009-3-18 15:23     标题: 回复楼上的帖子

感谢楼上的朋友提供的连接,也感谢pusofalse的在其中的讲解。
现在就是代码不甚命了,想问下为什么delims后面没有指定任何分隔符呢?
作者: Lumiere    时间: 2009-3-18 15:54     标题: 搞懂了

多谢楼上各位坛友高手的解答,多谢多谢!
作者: Batcher    时间: 2009-3-18 16:04     标题: 回复 9楼 的帖子

tokens=*和delims=的区别是什么?
http://bbs.bathome.net/viewthread.php?tid=1654#pid8870




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2