标题: 求一个删除系统多余帐户的脚本
[打印本页]
作者: dato
时间: 2007-12-15 21:56
标题: 求一个删除系统多余帐户的脚本
前面有朋友已经有个用定义好进程的文本来赋值,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
请按任意键继续. . .
作者: lxmxn
时间: 2007-12-15 23:06
试试这个呢?
for /f "delims=, tokens=2 skip=2" %a in ('wmic useraccount get name /format:CSV') do @call echo net user "%a" /del
作者: dato
时间: 2007-12-15 23:37
嗯,还是不行,
版主给的这个结构可以方便的取得用户名,但是我在整合时就变成
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不知道怎么出来的
作者: lxmxn
时间: 2007-12-15 23:42
Quote: |
if /I not defined %%i echo %%i |
|
if 命令的参数“/I”是用来比较字符串时忽略大小写的,没有你这样的用法。
另外,我的命令在前面加了一个call,你试试先?
我还没有具体的测试呢。
[
Last edited by lxmxn on 2007-12-15 at 11:43 PM ]
作者: dato
时间: 2007-12-15 23:59
嗯谢谢lxman晚安,明天再上来研究
我试过你的代码没一点问题,闷了,
作者: dato
时间: 2007-12-17 18:57
搞半天还是不行,其实对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
到了上面这句一点信息都没了
作者: huahua0919
时间: 2007-12-17 20:31
for /f "eol=; tokens=* delims=" %%i in (a.txt) do set %%i=A
我很不明白楼主是怎么写的, 按照上面的写法,文本a.txt中的每行都被替换成A了.
作者: dato
时间: 2007-12-17 20:55
【讨论】用 TASKKILL 关掉所有(除指定进程外的)进程
http://www.cn-dos.net/forum/view ... =%E8%BF%9B%E7%A8%8B
这是这个的原型,个人感觉那个set只是满足for语法要求而已并没有实际意义,下面的if defind才是重点,但是怪就怪在通过wmic出来的输出就变样了
作者: lxmxn
时间: 2007-12-17 21:05
再试试这个:
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 ]
作者: dato
时间: 2007-12-17 21:19
版主的代码没问题,估计还是这个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 ]
作者: everest79
时间: 2007-12-17 21:42
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 ]
作者: dato
时间: 2007-12-17 21:44
我们主要是最近机房要调用shutdown,个人觉得还是shutdown -l注销可控制性强点,有问题的话还能在开机状态下通过其它方式解除计划任务,但是试了好多种具有注销功能的软件,执行计划任务时必须对应登录帐号才能执行,所以必须搞个自动化删除任何学员自行建立的帐号,可能预保留帐号至少有3个。这个代码前期我也试过的,不知道为什么这次从wmic取值就后面带/I也不清楚是怎么冒出来的,试过net user之类输出的都是ansi编码,不知道为什么会出现这种怪问题,我的系统是win2003 se sp2
作者: everest79
时间: 2007-12-17 21:53
俺的方法不行吗?
作者: dato
时间: 2007-12-17 22:00

是啊还是不行哦,难道是我的系统有问题,看一下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
请按任意键继续. . .
作者: everest79
时间: 2007-12-17 22:09
你删除出错的账号应是全角字符,嘿嘿
你若要规范net user的列表可以枚举net localgroup 下的工作组来试试
作者: dato
时间: 2007-12-17 22:19
汗,听得一楞一楞的,
to everest79能不能写个代码,谢谢
作者: everest79
时间: 2007-12-17 22:38
for /f "delimst=*" %i in ('net localgroup^|find "*"') do (
net localgroup "%i"|findstr "^[a-z0-9]"
)
作者: everest79
时间: 2007-12-17 22:46
for /f "skip=1" %i in ('wmic useraccount get name^|more') do find "%i" userlist.ini||net user /delete "%i"
这个测试了完全可以删除全角字符的
作者: dato
时间: 2007-12-17 22:51
嗯,谢谢大家的热心帮助,很多东东还是看不懂啊

,要学的东东太多了,特别要谢谢两位版主,3Q
枚举本地计算机上的用户帐户
http://www.microsoft.com/china/t ... /user/scrug148.mspx
应该如何将输出保存到一个文本文件?
http://www.microsoft.com/china/t ... ources/hey0817.mspx