中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求一个删除系统多余帐户的脚本
作者:
标题: 求一个删除系统多余帐户的脚本 上一主题 | 下一主题
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 请按任意键继续. . .




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不知道怎么出来的




2007-12-15 23:37
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  

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晚安,明天再上来研究 我试过你的代码没一点问题,闷了,




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 到了上面这句一点信息都没了




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 关掉所有(除指定进程外的)进程 www.cn-dos.net/forum/viewthrea ... 这是这个的原型,个人感觉那个set只是满足for语法要求而已并没有实际意义,下面的if defind才是重点,但是怪就怪在通过wmic出来的输出就变样了




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 ]




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




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 请按任意键继续. . .




2007-12-17 22:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 15 楼』:  

你删除出错的账号应是全角字符,嘿嘿 你若要规范net user的列表可以枚举net localgroup 下的工作组来试试


2007-12-17 22:09
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: