中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求一个删除系统多余帐户的脚本
« [1] [2] »
作者:
标题: 求一个删除系统多余帐户的脚本 上一主题 | 下一主题
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
状态 离线
『第 5 楼』:  

嗯谢谢lxman晚安,明天再上来研究
我试过你的代码没一点问题,闷了,



http://dato.ys168.com
google search bot
http://dato.minidns.net/
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
状态 离线
『第 8 楼』:  

【讨论】用 TASKKILL 关掉所有(除指定进程外的)进程
http://www.cn-dos.net/forum/view ... =%E8%BF%9B%E7%A8%8B

这是这个的原型,个人感觉那个set只是满足for语法要求而已并没有实际意义,下面的if defind才是重点,但是怪就怪在通过wmic出来的输出就变样了



http://dato.ys168.com
google search bot
http://dato.minidns.net/
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
状态 离线
『第 13 楼』:  

俺的方法不行吗?

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
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: