|
dato
高级用户
积分 916
发帖 377
注册 2004-3-8
状态 离线
|
『楼 主』:
求一个删除系统多余帐户的脚本
前面有朋友已经有个用定义好进程的文本来赋值,taskkill不在文本里的进程,:D没办法对for格式化输出的掌握不好,写不出这个东东
setlocal enabledelayedexpansion
for /f "skip=1 tokens=* delims=" %%i in ('wmic useraccount get name') do set %%i=A
for /f "eol=; tokens=* delims=" %%i in (Process.ini) do if /I defined "%%i" net user "%%i" /delete
pause
结果,不知道哪里出错了,就是无法删除 1 1 1用户,哪位朋友支招,顺便求个适用win2k不调用wmic的
C:\Documents and Settings\Administrator\桌面>setlocal enabledelayedexpansion
C:\Documents and Settings\Administrator\桌面>for /F "skip=1 tokens=* delims=" %i
in ('wmic useraccount get name') do set %i=A
=A Documents and Settings\Administrator\桌面>set 1 1 1
=A Documents and Settings\Administrator\桌面>set fdiy
=A Documents and Settings\Administrator\桌面>set Guest
=A Documents and Settings\Administrator\桌面>set
命令语法不正确。
C:\Documents and Settings\Administrator\桌面>for /F "eol=; tokens=* delims=" %i
in (Process.ini) do if /I defined "%i" net user "%i" /delete
C:\Documents and Settings\Administrator\桌面>if /I defined "1 1 1" net user "1 1
1" /delete
C:\Documents and Settings\Administrator\桌面>pause
请按任意键继续. . .
|
http://dato.ys168.com
google search bot
http://dato.minidns.net/ |
|
2007-12-15 21:56 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
2 楼』:
试试这个呢?
for /f "delims=, tokens=2 skip=2" %a in ('wmic useraccount get name /format:CSV') do @call echo net user "%a" /del
|
|
2007-12-15 23:06 |
|
|
dato
高级用户
积分 916
发帖 377
注册 2004-3-8
状态 离线
|
『第
3 楼』:
嗯,还是不行,
版主给的这个结构可以方便的取得用户名,但是我在整合时就变成
setlocal enabledelayedexpansion
for /f "eol=; tokens=* delims=" %%i in (Process.ini) do set %%i=A
for /f "delims=, tokens=2 skip=2" %%i in ('wmic useraccount get name /format:CSV') do if /I not defined %%i echo %%i
pause
----------------------------
D:\del>setlocal enabledelayedexpansion
D:\del>for /F "eol=; tokens=* delims=" %i in (Process.ini) do set %i=A
D:\del>set fdiy=A
D:\del>set guest=A
D:\del>for /F "delims=, tokens=2 skip=2" %i in ('wmic useraccount get name /form
at:CSV') do if /I not defined %i echo %i
echo 1 1 1I not defined 1 1 1
1 1 1
echo fdiy/I not defined fdiy
fdiy
echo GuestI not defined Guest
Guest
D:\del>pause
请按任意键继续. . .
用户名后面这个I不知道怎么出来的
|
http://dato.ys168.com
google search bot
http://dato.minidns.net/ |
|
2007-12-15 23:37 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
4 楼』:
Quote: | if /I not defined %%i echo %%i |
|
if 命令的参数“/I”是用来比较字符串时忽略大小写的,没有你这样的用法。
另外,我的命令在前面加了一个call,你试试先?
我还没有具体的测试呢。
[ Last edited by lxmxn on 2007-12-15 at 11:43 PM ]
|
|
2007-12-15 23:42 |
|
|
dato
高级用户
积分 916
发帖 377
注册 2004-3-8
状态 离线
|
|
2007-12-15 23:59 |
|
|
dato
高级用户
积分 916
发帖 377
注册 2004-3-8
状态 离线
|
『第
6 楼』:
搞半天还是不行,其实对for /I参数的这种匹配方式也不是很明白,但是这段程序是论坛上的有位朋友写的。最后才发现出来 wmic输出的竟然是unicode编码的东东,也不知道if出什么问题了,请问版主有没有办法对net user的输出进行格式化
wmic useraccount get name /format:CSV>b.txt
setlocal enabledelayedexpansion
for /f "eol=; tokens=* delims=" %%i in (a.txt) do set %%i=A
for /f "delims=, tokens=2 skip=2" %%i in (b.txt) do if /I not defined %%i echo %%i
到了上面这句一点信息都没了
|
http://dato.ys168.com
google search bot
http://dato.minidns.net/ |
|
2007-12-17 18:57 |
|
|
huahua0919
银牌会员
积分 1608
发帖 780
注册 2007-10-7
状态 离线
|
『第
7 楼』:
for /f "eol=; tokens=* delims=" %%i in (a.txt) do set %%i=A
我很不明白楼主是怎么写的, 按照上面的写法,文本a.txt中的每行都被替换成A了.
|
|
2007-12-17 20:31 |
|
|
dato
高级用户
积分 916
发帖 377
注册 2004-3-8
状态 离线
|
|
2007-12-17 20:55 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
9 楼』:
再试试这个:
for /f "tokens=*" %a in ('wmic useraccount get name^|more +1') do @call net user %a [ Last edited by lxmxn on 2007-12-17 at 09:06 PM ]
|
|
2007-12-17 21:05 |
|
|
dato
高级用户
积分 916
发帖 377
注册 2004-3-8
状态 离线
|
『第
10 楼』:
版主的代码没问题,估计还是这个if defined的问题
wmic useraccount get name /format:CSV>b.txt
setlocal enabledelayedexpansion
for /f "eol=; tokens=* delims=" %%i in (a.txt) do set %%i=A
for /f "delims=, tokens=2 skip=1" %%i in (b.txt为unicode编码) do if /I not defined %%i net user "%%i" /delete 完全没法运行
wmic useraccount get name /format:CSV>b.txt
setlocal enabledelayedexpansion
for /f "eol=; tokens=* delims=" %%i in (a.txt) do set %%i=A
for /f "delims=, tokens=2 skip=1" %%i in (c.txt为ansi编码内容一模一样) do if /I not defined %%i net user "%%i" /delete Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.
D:\del>wmic useraccount get name /format:CSV 1>b.txt
D:\del>setlocal enabledelayedexpansion
D:\del>for /F "eol=; tokens=* delims=" %i in (a.txt) do set %i=A
D:\del>set fdiy=A
D:\del>set Guest=A
D:\del>for /F "delims=, tokens=2 skip=1" %i in (c.txt) do if /I not defined %i n
et user "%i" /delete
D:\del>if /I not defined Name net user "Name" /delete
找不到用户名。
请键入 NET HELPMSG 2221 以获得更多的帮助。
D:\del>if /I not defined 1 1 1 net user "1 1 1" /delete
命令成功完成。
D:\del>if /I not defined fdiy net user "fdiy" /delete
D:\del>if /I not defined Guest net user "Guest" /delete
神啊救救我啊,
[ Last edited by dato on 2007-12-17 at 09:20 PM ]
|
http://dato.ys168.com
google search bot
http://dato.minidns.net/ |
|
2007-12-17 21:19 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
11 楼』:
wmic useraccount where "name!='administrator' and name!='test' and name!='shishijiushishi'" delete
---------
for /f "delims=, tokens=2 skip=2" %a in ('wmic useraccount get name /format:CSV') do findstr /b /e /C:"%a" userlist.ini&&net user %a /delete
[ Last edited by everest79 on 2007-12-17 at 09:49 PM ]
|
|
2007-12-17 21:42 |
|
|
dato
高级用户
积分 916
发帖 377
注册 2004-3-8
状态 离线
|
『第
12 楼』:
我们主要是最近机房要调用shutdown,个人觉得还是shutdown -l注销可控制性强点,有问题的话还能在开机状态下通过其它方式解除计划任务,但是试了好多种具有注销功能的软件,执行计划任务时必须对应登录帐号才能执行,所以必须搞个自动化删除任何学员自行建立的帐号,可能预保留帐号至少有3个。这个代码前期我也试过的,不知道为什么这次从wmic取值就后面带/I也不清楚是怎么冒出来的,试过net user之类输出的都是ansi编码,不知道为什么会出现这种怪问题,我的系统是win2003 se sp2
|
http://dato.ys168.com
google search bot
http://dato.minidns.net/ |
|
2007-12-17 21:44 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
|
2007-12-17 21:53 |
|
|
dato
高级用户
积分 916
发帖 377
注册 2004-3-8
状态 离线
|
『第
14 楼』:
是啊还是不行哦,难道是我的系统有问题,看一下2003的结果到时候我再到虚拟机下试试
D:\del>wmic useraccount where "name!='fdiy' and name!='Guest' and name!='111'" d
elete
删除范例 \\DATO\ROOT\CIMV2:Win32_UserAccount.Domain="DATO",Name="1 1"
错误:
代码 = 0x80041024
说明 = 提供程序无法执行该操作
设备 = WMI
D:\del>pause
请按任意键继续. . .
---------------------------------------
D:\del>for /F "delims=, tokens=2 skip=2" %a in ('wmic useraccount get name /form
at:CSV') do findstr /b /e /C:"%a" userlist.ini && net user %a /delete
/delete t.ini && net user 1 1
/delete t.ini && net user 111
/delete t.ini && net user 123
/delete t.ini && net user fdiy
/delete t.ini && net user Guest
D:\del>pause
请按任意键继续. . .
|
http://dato.ys168.com
google search bot
http://dato.minidns.net/ |
|
2007-12-17 22:00 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
15 楼』:
你删除出错的账号应是全角字符,嘿嘿
你若要规范net user的列表可以枚举net localgroup 下的工作组来试试
|
|
2007-12-17 22:09 |
|