Board logo

标题: 统计用户组信息 [打印本页]

作者: yuipr     时间: 2007-2-10 03:47    标题: 统计用户组信息

@echo off
for /f "tokens=2 delims=*" %a in ('net user %username%^|find "local"') do @echo %~a
怎么用这个命令提示错误。

[ Last edited by yuipr on 2007-2-9 at 03:21 PM ]
作者: zh159     时间: 2007-2-10 04:16
在批处理里用%%a(双百分号),命令行用%a(单百分号)
作者: yuipr     时间: 2007-2-10 04:21
是这样吗:@echo off
for /f "tokens=2 delims=*" %%a in ('net user'%username%'^|find"local"') do @echo %~a   还是不行呢

[ Last edited by yuipr on 2007-2-9 at 03:23 PM ]
作者: yuipr     时间: 2007-2-10 04:23


  Quote:
Originally posted by zh159 at 2007-2-9 03:16 PM:
在批处理里用%%a(双百分号),命令行用%a(单百分号)

麻烦能不能再解释一下啊要,急
作者: zh159     时间: 2007-2-10 04:27
for /f "tokens=2 delims=*" %%a in ('net user %username%^|find "local"') do @echo %%~a

[ Last edited by zh159 on 2007-2-9 at 03:33 PM ]
作者: yuipr     时间: 2007-2-10 04:33


  Quote:
Originally posted by zh159 at 2007-2-9 03:27 PM:
for /f "tokens=2" %%a in ('net user %username%^|find "local"') do @echo %%~a

[ Last edited by zh159 on 2007-2-9 at 03:31 PM ]

照着你的改了,用批处理执行,什么都没显示,没看到错误,于是命令执行错误如下“
C:\>@echo off
for /f "tokens=2 delims=*" %a in ('net user'%username%'^|find"local"') do @echo
%~a
'find"local"' is not recognized as an internal or external command,
operable program or batch file.
作者: zh159     时间: 2007-2-10 04:36
你的'net user'%username%'^|find"local"'写法完全不对,中间没有空格

'net user "%username%"^|find "local"'

[ Last edited by zh159 on 2007-2-9 at 03:37 PM ]
作者: yuipr     时间: 2007-2-10 04:45
照你说的改了:
C:\Documents and Settings\yichuanj>@echo off for /f "tokens=2 delims=*" %a in ('net user'%username%'^|find "local"') do @echo
off for /f "tokens=2 delims=*" %a in ('net user'yichuanj'|find "local"') do @ech
o
这是命令执行后,自动显示的。批处理的还是不行,关于用户信息统计你能不写一个完整的批处理发上来啊,弄了一天了,还是没搞定,头都大了,谢谢

[ Last edited by yuipr on 2007-2-9 at 03:46 PM ]
作者: zh159     时间: 2007-2-10 04:50
user'yichuanj'

看看你能不能看出什么问题
作者: yuipr     时间: 2007-2-10 04:54


  Quote:
Originally posted by zh159 at 2007-2-9 03:50 PM:
user'yichuanj'

看看你能不能看出什么问题

我的系统环境是”域“,这个用户是域中的一个用户也是我当前登录本机的用户,没看出来有什么问题。
作者: zh159     时间: 2007-2-10 04:59
net user'%username%'

user和'%username%'之间没有空格,而且%username%不能用单引号''引用,只能用双引号""引用
作者: yuipr     时间: 2007-2-10 05:10
不好意思,我改了
C:\Documents and Settings\yichuanj>@echo off
for /f "tokens=2 delims=*" %a in ('net user "%username%" ^|find "local"') do @ec
ho %~a
The user name could not be found.

More help is available by typing NET HELPMSG 2221.
作者: yuipr     时间: 2007-2-10 05:16


  Quote:
Originally posted by qingfushuan at 2007-2-9 04:13 PM:
net user %username%是查询当前用户的详细信息,

看你的标题是查询所有的用户信息

去掉%username% 试试

C:\Documents and Settings\yichuanj>@echo off for /f "tokens=2 delims=*" %a in ('net user ^|find "local"') do @echo %~a
off for /f "tokens=2 delims=*" %a in ('net user |find "local"') do @echo %~a
还是不对呢?
作者: ccwan     时间: 2007-2-10 05:21
你的net user 命令执行后输出的内容含有"local"吗?我这里没有哎。所以在我这里代码是不能用的。
作者: qingfushuan     时间: 2007-2-10 05:21    标题: 'net user ^|find "local"'

执行net user ^| find "local" >>1.txt,1.txt没有内容,说明你这句就不对嘛
作者: yuipr     时间: 2007-2-10 05:24


  Quote:
Originally posted by yuipr at 2007-2-9 04:16 PM:

C:\Documents and Settings\yichuanj>@echo off for /f "tokens=2 delims=*" %a in ('net user ^|find "local"') do @echo %~a
off for /f "tokens=2 delims=*" %a in ('net ...

local的意思是要查询本机的用户组信息,不知道我这是不是写错了,改成任一主机名也行的,高人啊,帮帮我吧,今天必须要结果啊。

[ Last edited by yuipr on 2007-2-9 at 04:27 PM ]
作者: yuipr     时间: 2007-2-10 05:25


  Quote:
Originally posted by ccwan at 2007-2-9 04:21 PM:
你的net user 命令执行后输出的内容含有"local"吗?我这里没有哎。所以在我这里代码是不能用的。

有什么可行解决方案呢
作者: qingfushuan     时间: 2007-2-10 05:32    标题: net /?

问问net /?嘛
作者: zh159     时间: 2007-2-10 05:36
英文状态“本地组成员”是“Local Group Memberships”

英文CMD下:
for /f "tokens=2 delims=*" %%a in ('net user %username%^|find "Local Group Memberships"') do @echo %%~a
中文CMD下:
for /f "tokens=2 delims=*" %%a in ('net user %username%^|find "本地组成员"') do @echo %%~a

作者: yuipr     时间: 2007-2-10 05:36
关于这整个批处理你有什么好的建议呢,什么方法能实现我的需求啊
作者: yuipr     时间: 2007-2-10 05:45


  Quote:
Originally posted by zh159 at 2007-2-9 04:36 PM:
英文状态“本地组成员”是“Local Group Memberships”

英文CMD下:
[code]for /f "tokens=2 delims=*" %%a in ('net user %username%^|find "Local Group Memberships&quo ...

还是不对呢,怪了,难到在你们的机器上能够实现吗?
作者: yuipr     时间: 2007-2-10 05:47
C:\Documents and Settings\yichuanj>@echo off for /f "tokens=2 delims=*" %a in ('
net user %username%^ |find "Local Group Memberships"') do @echo %~a
FIND: Parameter format not correct
作者: redtek     时间: 2007-2-10 05:59


  Quote:
Originally posted by yuipr at 2007-2-9 16:47:
C:\Documents and Settings\yichuanj>@echo off for /f "tokens=2 delims=*" %a in ('
net user %username%^ |find "Local Group Memberships"') do @echo %~a
FIND: Parameter format  ...

兄每次都喜欢把 @echo off 和本应在第二行的命令连成一行一起运行吗?
作者: yuipr     时间: 2007-2-10 06:04


  Quote:
Originally posted by redtek at 2007-2-9 04:59 PM:



兄每次都喜欢把 @echo off 和本应在第二行的命令连成一行一起运行吗?

谢谢提醒:
C:\Documents and Settings\yichuanj>@echo off
for /f "tokens=2 delims=*" %a in ('net user %username%^|find "Local Group Member
ships"') do @echo %~a
The user name could not be found.

More help is available by typing NET HELPMSG 2221.
还是有问题呢,
作者: redtek     时间: 2007-2-10 06:05
建议兄先将 for 去掉,先调试好 net .... 这句。

然后再把 for 加上,否则一层一层怎么错的都不知道,反而加深了调试和解决问题的复杂度:)


如果兄希望一步到位的解决问题,建议如下:


1、兄只执行   net user %username%   这句,然后贴上返回信息,为了方便调试。

2、兄在上面返回信息中标示出你想要什么信息(用颜色标示出来)

3、大家都确认正确以后,再加入 For 和 Find 来操作,这些只是一步的事儿。

[ Last edited by redtek on 2007-2-9 at 05:07 PM ]
作者: yuipr     时间: 2007-2-10 06:12


  Quote:
Originally posted by redtek at 2007-2-9 05:05 PM:
建议兄先将 for 去掉,先调试好 net .... 这句。

然后再把 for 加上,否则一层一层怎么错的都不知道,反而加深了调试和解决问题的复杂度:)


[b ...

非常感谢你细致如微的回答。
C:\Documents and Settings\yichuanj>@echo off
net uesr %username%
The syntax of this command is:


NET [ ACCOUNTS | COMPUTER | CONFIG | CONTINUE | FILE | GROUP | HELP |
      HELPMSG | LOCALGROUP | NAME | PAUSE | PRINT | SEND | SESSION |
      SHARE | START | STATISTICS | STOP | TIME | USE | USER | VIEW ]
我这种调试方法不知道对不对?
作者: redtek     时间: 2007-2-10 06:21
这是在切换代码页:437 英文状态下的 CMD 输出:
执行命令:  net user %username% 所显示的内容:
User name                    abc
Full Name                    Abc
Comment
User's comment
Country code                 000 (System Default)
Account active               Yes
Account expires              Never

Password last set            5/26/2005 2:26 PM
Password expires             Never
Password changeable          5/26/2005 2:26 PM
Password required            Yes
User may change password     No

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   2/9/2007 7:54 AM

Logon hours allowed          All

Local Group Memberships      *Administrators       *Debugger Users
                             *Remote Desktop Users *Users
Global Group memberships     *None
The command completed successfully.
兄对照一下,想要得到什么?



另:兄在命令行输入

     CHCP   


输入上面的命令后回车,想看一下兄的 CMD 是默认哪一种代码页,并贴上兄的操做系统版本。



这是在 Windows CMD 中文 936 代码页下执行: net user %username% 命令的输入内容:
用户名                 abc
全名                   Abc
注释
用户的注释
国家(地区)代码         000 (系统默认值)
帐户启用               Yes
帐户到期               从不

上次设置密码           2005/5/26 下午 02:26
密码到期               从不
密码可更改             2005/5/26 下午 02:26
需要密码               Yes
用户可以更改密码       No

允许的工作站           All
登录脚本
用户配置文件
主目录
上次登录               2007/2/9 上午 07:54

可允许的登录小时数     All

本地组成员             *Administrators       *Debugger Users
                       *Remote Desktop Users *Users
全局组成员             *None
命令成功完成。

作者: redtek     时间: 2007-2-10 06:26
另,我没有时间帮兄调试,
只是看着兄没有一次性把自己需要的内容说全,而且兄没有写出在自己机器上单步的执行效果,看着着急,
所以,才写出上面建议:)

如果兄写全了这些信息,给兄解决问题zh159兄和ccwan兄一步就可以帮兄解决掉这问题了:)

所以,建议兄一次写全问题,这样解决者全非常方便一次性解决掉:)
作者: qingfushuan     时间: 2007-2-10 06:26    标题: 查询用户组

net localgroup
作者: yuipr     时间: 2007-2-10 06:30
非常感谢redtek大哥的再次回答
C:\>chcp
Active code page: 936

我的操作系统是winxp en sp2
我在cmd模式下执行 C:\> net user %username%
The user name could not be found.

More help is available by typing NET HELPMSG 2221.

我和你的代码页应该是一样的,为什么我会提示找不到用户呢?看来就是net user %username%这步有问题。

[ Last edited by yuipr on 2007-2-9 at 05:33 PM ]
作者: yuipr     时间: 2007-2-10 06:36


  Quote:
Originally posted by redtek at 2007-2-9 05:26 PM:
另,我没有时间帮兄调试,
只是看着兄没有一次性把自己需要的内容说全,而且兄没有写出在自己机器上单步的执行效果,看着着急,
所以,才写出 ...

redtek大哥,看来前面我的表达是不是很清楚,现在用net user %username%就有问题,提示找不到用户,看来问题是在这儿。
作者: redtek     时间: 2007-2-10 06:43
兄客气了,别谢我,要感谢就感谢zh159,ccwan和qingfushuan兄一直在帮兄热情的解决问题:)

兄看一下是否自己登录的帐号权限不够(目前登录的不是管理员组?)。

我对网格不懂、看英文更头晕,所以帮不上兄什么忙,也就是提点小建议而已:)

兄把问题写全:)
zh159、ccwan兄和qingfushuan兄几位高手会帮助兄把问题解决掉的:)
作者: zh159     时间: 2007-2-10 06:46


  Quote:
Originally posted by yuipr at 2007-2-9 17:12:

非常感谢你细致如微的回答。
C:\Documents and Settings\yichuanj>@echo off
net uesr %username%
The syntax of this command is:


NET [ ACCOUNTS | COMPUTER | CONFIG |  ...

先检查你的单词拼写
作者: yuipr     时间: 2007-2-10 06:49


  Quote:
Originally posted by redtek at 2007-2-9 05:43 PM:
兄客气了,别谢我,要感谢就感谢zh159,ccwan和qingfushuan兄一直在帮兄热情的解决问题:)

兄看一下是否自己登录的帐号权限不够(目前登录的不是管 ...

我登录的这个帐号是在管理员组中的,不知道为什么会有这个问题。在坛子上泡了一下午了,对zh159,ccwan和qingfushuan的帮助,非常感谢,小弟这在执行net user %username%还是有问题,不是权限问题的,请问大家还有什么办法能解决吗?
作者: yuipr     时间: 2007-2-10 06:51


  Quote:
Originally posted by zh159 at 2007-2-9 05:46 PM:

先检查你的单词拼写

请问不是”net user “
作者: zh159     时间: 2007-2-10 06:52


  Quote:
Originally posted by yuipr at 2007-2-9 17:51:

请问不是”net user “

之前你写成了uesr

echo %username%

看看能不能显示
作者: qingfushuan     时间: 2007-2-10 06:52    标题: net user&net localgroup

net user            net localgroup
查询用户           查询用户组
作者: qingfushuan     时间: 2007-2-10 06:54    标题: %username%

%username%  当前用户名
作者: yuipr     时间: 2007-2-10 06:55


  Quote:
Originally posted by zh159 at 2007-2-9 05:52 PM:

之前你写成了uesr

echo %username%

看看能不能显示

可能之前是手误,见笑了
C:\Documents and Settings\yichuanj>echo %username%
yichuanj
显示是当前的登录用户
作者: yuipr     时间: 2007-2-10 06:56


  Quote:
Originally posted by qingfushuan at 2007-2-9 05:52 PM:
net user            net localgroup
查询用户           查询用户组

那ingfushuan说在批处理就直接用net user 吗
作者: zh159     时间: 2007-2-10 06:57
那就再试试

net user %username%
作者: qingfushuan     时间: 2007-2-10 06:59    标题: 直接在cmd下用net user >>1.txt,你试试

直接在cmd下用net user >>1.txt,1.txt里的就是你查询的所有用户
直接在cmd下用net loaclgroup >>2.txt.2.txt里的就是你查询的所有用户组
作者: qingfushuan     时间: 2007-2-10 07:00    标题: 用>

用>就够了,不需要>>
作者: yuipr     时间: 2007-2-10 07:02


  Quote:
Originally posted by qingfushuan at 2007-2-9 05:59 PM:
直接在cmd下用net user >>1.txt,1.txt里的就是你查询的所有用户
直接在cmd下用net loaclgroup >>2.txt.2.txt里的就是你查询的所有用户组

这确实是一种方法,关键是这样显示出来的话,对每个用户的信息还是不明确,理想效果 zhanggj(用户):(后面这是组信息)ccusers,ccusers,ccmsg
作者: yuipr     时间: 2007-2-10 07:03


  Quote:
Originally posted by zh159 at 2007-2-9 05:57 PM:
那就再试试

net user %username%

还是提示找不到这个用户。
作者: qingfushuan     时间: 2007-2-10 07:49    标题: 你一步一步试试

你一步一步再试试

我得回家了,下面的例子供你参考
@echo off
echo 所有用户帐号ID为:
echo.
for /f "skip=4 tokens=1-3" %%i in ('net user') do (
    if not "%%i"=="命令成功完成。" echo %%i
    if not "%%j"=="" echo %%j
    if not "%%k"=="" echo %%k
)
echo.
echo 当前用户帐号ID为:%username%
pause>nul


显示进度条.bat
@echo off
:: code by jm 2006-11-30 CMD@XP
set var=">"
set/p=正在加载: <nul
ping -n 2 127.1>nul
for /l %%i in (1,1,20) do (
    set/p=%var%<nul
    ping -n 2 127.1>nul
)
echo.
echo.
pause
作者: yuipr     时间: 2007-2-10 08:29
按照你的方法,是能显示用户,但用户的信息还是没能显示出来啊
作者: qingfushuan     时间: 2007-2-10 22:05    标题: 再试试

for /f "skip=4 tokens=1-3" %%i in ('net user') do (
    if not "%%i"=="命令成功完成。" echo %%i >>1.txt
    if not "%%j"=="" echo %%j >>1.txt
    if not "%%k"=="" echo %%k >>1.txt
    )
for /f %%a in (1.txt) do net user %%a | find "用户名"  
::for /f %%a in (1.txt) do net user %%a | find "本地组成员"
::for /f %%a in (1.txt) do net user %%a | find "全局组成员"

[ Last edited by qingfushuan on 2007-2-10 at 09:53 AM ]
作者: yuipr     时间: 2007-2-10 22:15


  Quote:
Originally posted by qingfushuan at 2007-2-10 09:05 AM:
for /f "skip=4 tokens=1-3" %%i in ('net user') do (
    if not "%%i"=="命令成功完成。" echo %%i >>1.txt
    if not "%%j"=="" echo %% ...

这个脚本执行的结果
__vmware_user__
Administrator
Guest
HelpAssistant
SUPPORT_388945a0
还没有把用户的组信息给统计出来呢,兄弟再给看看?
作者: qingfushuan     时间: 2007-2-10 23:00    标题: 试试行吗?

@echo off
for /f "skip=4 tokens=1-3" %%i in ('net user') do (
    if not "%%i"=="命令成功完成。" echo %%i >>1.txt
    if not "%%j"=="" echo %%j >>1.txt
    if not "%%k"=="" echo %%k >>1.txt
    )
for /f %%a in (1.txt) do net user %%a | find "用户名"&net user %%a | find "本地组成员"&net user %%a | find "全局组成员"

[ Last edited by qingfushuan on 2007-2-10 at 10:07 AM ]
作者: qingfushuan     时间: 2007-2-10 23:38    标题: 更精简的

@echo off
for /f "skip=4 tokens=1-3" %%i in ('net user') do (
    if not "%%i"=="命令成功完成。" echo %%i >>1.txt
    if not "%%j"=="" echo %%j >>1.txt
    if not "%%k"=="" echo %%k >>1.txt
    )
for /f %%a in (1.txt) do net user %%a|findstr /r "用户名 本地组成员 全局组成员"


我是菜鸟边学边回答你的问题哈,不好意思罗,上面还可以精简吗,烦请那位老鸟回答一下,我想应该可以不产生1.txt的?

[ Last edited by qingfushuan on 2007-2-10 at 11:28 AM ]
作者: oilio     时间: 2007-2-10 23:43
%username%始终说的是一个用户啊,不会列出所有用户啊。直接net user会列出所有用名,你用echo %username%就是你现在登陆计算机的这个用户名。