找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20012|回复: 1

[系统相关] bathome比赛题第二题

[复制链接]
发表于 2013-8-27 21:10:31 | 显示全部楼层 |阅读模式
2、检查系统里面是否有非法增加和减少的用户账号
注意:
(1)假设文件 D:\BatHome_User_List.txt 里面保存着所有的合法用户的列表
(2)需要分别找出当前系统里面非法增加的账号和减少的账号


分析:
批处理查看用户帐号的命令是NET USER,不过,这个看不到隐藏帐号(以$结束的用户名)
结果以表方式列出,一行三个
用户名最多20个字符,后面用空格补全到25个字符
用户名中是是可以使用空格的,直接用For来分割可能会有问题

1.处理NET USER的结果,循环去D:\BatHome_User_List.txt 验证是否存在,计算出合法用户,非法增加的帐号
2.NET USER的结果找个地方存起来
3.循环D:\BatHome_User_List.txt,与NET USER的结果比较验证,检查减少的帐号
  1. @ECHO OFF

  2. :: NET USER结束语
  3. SET @NETUSER_EndWord=命令成功完成。
  4. :: 合法用户列表
  5. SET @UserList=D:\BatHome_User_List.txt
  6. :: 比较时使用的Log
  7. SET @CompareLog=D:\BatHome_User_List_Compare.log

  8. REM 读取现有系统中有用户,随便检查然后输出到@CompareLog
  9. DEL /Q %@CompareLog%>NUL 2>NUL

  10. SET /A r1=0,r2=0,r3=0
  11. SET k=
  12. SET u=
  13. FOR /F "tokens=*" %%a IN ('NET USER') DO (
  14.         REM 发现结束语,终止输出
  15.         ECHO %%a|FIND "%@NETUSER_EndWord%" >NUL&&SET k=

  16.         IF DEFINED k (
  17.                 SET s=%%a
  18.                 FOR /L %%b IN (0,25,50) DO (
  19.                         REM 截取20位
  20.                         CALL;SET "u=%%s:~%%b,20%%"
  21.                         REM 去掉左右空格
  22.                         FOR /F "delims=" %%d IN ('ECHO %%u%%') DO SET "u=%%~nxd"

  23.                         FOR /F %%c IN ('ECHO %%u%%') DO (
  24.                                 IF "%%c" NEQ "%%u%%" (
  25.                                         FINDSTR /B /E "%%c" %@UserList%>NUL&&SET K2=0||SET K2=1
  26.                                         FOR /F %%d IN ('ECHO %%K2%%') DO (
  27.                                                 IF "%%d"=="0" (
  28.                                                         SET /A r1+=1
  29.                                                         ECHO %%c [合法用户]
  30.                                                         ECHO %%c [合法用户]>>%@CompareLog%
  31.                                                 ) ELSE (
  32.                                                         SET /A r2+=1
  33.                                                         ECHO %%c [非法增加]
  34.                                                         ECHO %%c [非法增加]>>%@CompareLog%
  35.                                                 )
  36.                                         )
  37.                                 )
  38.                         )
  39.                 )
  40.         ) ELSE (
  41.                 REM 以-为开始行,设置k用于纪录输出
  42.                 ECHO %%a|FIND "-" >NUL&&SET k=OK
  43.         )
  44. )
  45. REM 读取现有列表中有用户,检查减少
  46. FOR /F "tokens=*" %%a IN (%@UserList%) DO (
  47.         FINDSTR /B "%%a [" %@CompareLog%>NUL&&SET K2=0||SET K2=1
  48.         FOR /F %%b IN ('ECHO %%K2%%') DO (
  49.                 IF "%%b"=="1" (
  50.                         SET /A r3+=1
  51.                         ECHO %%a [不明减少]
  52.                         ECHO %%a [不明减少]>>%@CompareLog%
  53.                 )
  54.         )
  55. )
  56. ECHO =============================================================================
  57. ECHO 比较后%r1%位用户与列表一致,%r3%位用户不明减少,%r2%位用户非法增加

  58. DEL /Q %@CompareLog%>NUL 2>NUL

  59. PAUSE
  60. EXIT /B
复制代码
之后题目好难啊
发表于 2013-8-28 22:30:29 | 显示全部楼层
6个嵌套,头都晕了..
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 01:35 , Processed in 0.017028 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表