
bathome比賽題第二題
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的結果比較驗證,檢查減少的帳號
之后題目好難啊nclick="copycode($('code0'));">復制代碼
- @ECHO OFF
- :: NET USER結束語
- SET @NETUSER_EndWord=命令成功完成。
- :: 合法用戶列表
- SET @UserList=D:BatHome_User_List.txt
- :: 比較時使用的Log
- SET @CompareLog=D:BatHome_User_List_Compare.log
- REM 讀取現有系統中有用戶,隨便檢查然后輸出到@CompareLog
- DEL /Q %@CompareLog%>NUL 2>NUL
- SET /A r1=0,r2=0,r3=0
- SET k=
- SET u=
- FOR /F tokens=* %%a IN ('NET USER') DO (
- REM 發現結束語,終止輸出
- ECHO %%a|FIND %@NETUSER_EndWord% >NUL&&SET k=
- IF DEFINED k (
- SET s=%%a
- FOR /L %%b IN (0,25,50) DO (
- REM 截取20位
- CALL;SET u=%%s:~%%b,20%%
- REM 去掉左右空格
- FOR /F delims= %%d IN ('ECHO %%u%%') DO SET u=%%~nxd
- FOR /F %%c IN ('ECHO %%u%%') DO (
- IF %%c NEQ %%u%% (
- FINDSTR /B /E %%c %@UserList%>NUL&&SET K2=0||SET K2=1
- FOR /F %%d IN ('ECHO %%K2%%') DO (
- IF %%d==0 (
- SET /A r1+=1
- ECHO %%c [合法用戶]
- ECHO %%c [合法用戶]>>%@CompareLog%
- ) ELSE (
- SET /A r2+=1
- ECHO %%c [非法增加]
- ECHO %%c [非法增加]>>%@CompareLog%
- )
- )
- )
- )
- )
- ) ELSE (
- REM 以-為開始行,設置k用于紀錄輸出
- ECHO %%a|FIND - >NUL&&SET k=OK
- )
- )
- REM 讀取現有列表中有用戶,檢查減少
- FOR /F tokens=* %%a IN (%@UserList%) DO (
- FINDSTR /B %%a [ %@CompareLog%>NUL&&SET K2=0||SET K2=1
- FOR /F %%b IN ('ECHO %%K2%%') DO (
- IF %%b==1 (
- SET /A r3+=1
- ECHO %%a [不明減少]
- ECHO %%a [不明減少]>>%@CompareLog%
- )
- )
- )
- ECHO =============================================================================
- ECHO 比較后%r1%位用戶與列表一致,%r3%位用戶不明減少,%r2%位用戶非法增加
- DEL /Q %@CompareLog%>NUL 2>NUL
- PAUSE
- EXIT /B

