![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-06 22:29 |
共 48,039 主题排行 / 350,124 发帖 / 今日 0 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 求一个删除系统多余帐户的脚本 |
| 可打印版本 1,834 / 18 |
| 第1楼 dato | 发表于 2007-12-15 21:56 |
| 高级用户 发帖 377 积分 916 | |
|
求一个删除系统多余帐户的脚本 前面有朋友已经有个用定义好进程的文本来赋值,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 请按任意键继续. . . |
|
| 第2楼 lxmxn | 发表于 2007-12-15 23:06 |
| 版主 发帖 4,938 积分 11,386 | |
|
试试这个呢?
|
|
| 第3楼 dato | 发表于 2007-12-15 23:37 |
| 高级用户 发帖 377 积分 916 | |
|
嗯,还是不行,
版主给的这个结构可以方便的取得用户名,但是我在整合时就变成 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不知道怎么出来的 |
|
| 第4楼 lxmxn | 发表于 2007-12-15 23:42 |
| 版主 发帖 4,938 积分 11,386 | |
if /I not defined %%i echo %%i if 命令的参数“/I”是用来比较字符串时忽略大小写的,没有你这样的用法。 另外,我的命令在前面加了一个call,你试试先? 我还没有具体的测试呢。 [ Last edited by lxmxn on 2007-12-15 at 11:43 PM ] |
|
| 第5楼 dato | 发表于 2007-12-15 23:59 |
| 高级用户 发帖 377 积分 916 | |
|
嗯谢谢lxman晚安,明天再上来研究
我试过你的代码没一点问题,闷了, |
|
| 第6楼 dato | 发表于 2007-12-17 18:57 |
| 高级用户 发帖 377 积分 916 | |
|
搞半天还是不行,其实对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 到了上面这句一点信息都没了 |
|
| 第7楼 huahua0919 | 发表于 2007-12-17 20:31 |
| 银牌会员 发帖 780 积分 1,608 | |
|
for /f "eol=; tokens=* delims=" %%i in (a.txt) do set %%i=A
我很不明白楼主是怎么写的, 按照上面的写法,文本a.txt中的每行都被替换成A了. |
|
| 第8楼 dato | 发表于 2007-12-17 20:55 |
| 高级用户 发帖 377 积分 916 | |
|
【讨论】用 TASKKILL 关掉所有(除指定进程外的)进程
http://www.cn-dos.net/forum/viewthread.php?tid=27155&fpage=1&highlight=%E8%BF%9B%E7%A8%8B 这是这个的原型,个人感觉那个set只是满足for语法要求而已并没有实际意义,下面的if defind才是重点,但是怪就怪在通过wmic出来的输出就变样了 |
|
| 第9楼 lxmxn | 发表于 2007-12-17 21:05 |
| 版主 发帖 4,938 积分 11,386 | |
|
再试试这个:
[ Last edited by lxmxn on 2007-12-17 at 09:06 PM ] |
|
| 第10楼 dato | 发表于 2007-12-17 21:19 |
| 高级用户 发帖 377 积分 916 | |
|
版主的代码没问题,估计还是这个if defined的问题
完全没法运行 Microsoft Windows (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 ] |
|
| 第11楼 everest79 | 发表于 2007-12-17 21:42 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
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 ] |
|
| 第12楼 dato | 发表于 2007-12-17 21:44 |
| 高级用户 发帖 377 积分 916 | |
|
我们主要是最近机房要调用shutdown,个人觉得还是shutdown -l注销可控制性强点,有问题的话还能在开机状态下通过其它方式解除计划任务,但是试了好多种具有注销功能的软件,执行计划任务时必须对应登录帐号才能执行,所以必须搞个自动化删除任何学员自行建立的帐号,可能预保留帐号至少有3个。这个代码前期我也试过的,不知道为什么这次从wmic取值就后面带/I也不清楚是怎么冒出来的,试过net user之类输出的都是ansi编码,不知道为什么会出现这种怪问题,我的系统是win2003 se sp2
|
|
| 第13楼 everest79 | 发表于 2007-12-17 21:53 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
俺的方法不行吗?
|
|
| 第14楼 dato | 发表于 2007-12-17 22:00 |
| 高级用户 发帖 377 积分 916 | |
是啊还是不行哦,难道是我的系统有问题,看一下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 请按任意键继续. . . |
|
| 第15楼 everest79 | 发表于 2007-12-17 22:09 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
你删除出错的账号应是全角字符,嘿嘿
你若要规范net user的列表可以枚举net localgroup 下的工作组来试试 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |