BAT这种古老的语言,虽然很简单,可以在实际利用中却真的很麻烦。。  

   需求:使用bat脚本定期巡检大批量windows服务器上的每个账号的信息。


   思路:Step 1:使用net user 命令

         S2:使用for循环嵌套net user 输出结果

         S3:目录名以日期加IP的形式命名

         S4:使用at命令建立计划任务,其实schtasks更优,还在研究中

         S5:使用 net use 网络共享驱动器,将输出结果copy集中网络一个位置

         s6: 使用landesk推送脚本


   解决方案:

1、net user 用户名 >>特定输出文件

2、for /f " tokens= delims= " %%i in (文件) do net user %%i >> 特定输出文件

3、获取日期

set a=%date:\=-%  rem 避免\显示与目录名冲突

获取IP

for /f "tokens=2 delims=:" %%i in ('ipconfig^|find /i "IPv4 "') do echo "%%i" |findstr 10 && set b=%%i && goto LABEL

rem 获取正确IP后跳转出for循环

注:使用 find /i 在2008中可以,但是03要用findstr "IP"

4、at 1:00 /every:15 start \~lujing\userchk.bat rem 计划任务

5、网络共享,

net use q: \\IP\UserCHK\FFP  passwd/user:superadmin

copy E:\userchk\文件.txt q:\


6、网络共享的方式比较难看

补充 windows 下ftp自动上传的脚本

echo open $IP>>ftp.tmp

echo $username>>ftp.tmp

echo $passwd>>ftp.tmp

echo prompt off>>ftp.tmp

echo lcd $userchk>>ftp.tmp

echo put filename>>ftp.tmp

echo bye>>ftp.tmp

REM ftp -s参数后面加需要运行的文本,-i为多文件传输是非交互式。

ftp -i -s:ftp.tmp

REM 删除临时文件

del ftp.tmp


虽然看起来很简单,但是涉及到动态变量赋值,动态变量取值,以及if语句,for循环多重取值结构,字符截断及替换,管道传递及逻辑判断。

基本上掌握了这些批处理可以算基本入门了,有时间再详解这些命令使用。。

源代码:

if not exist E:\userchk mkdir E:userchk
if not exist E:\userchk\usercheck.bat copy %~dp0usercheck.bat E:\userchk
at |findstr "usercheck" || at 1:00 /every:15 start e:\usrchk\usercheck.bat
set b=%date:~0,10%
set b=%b:/=-%
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%i in ('ipconfig^|find /i "IPv4 "') do echo "%%i" |findstr 10 && set a=%%i && goto start || set a=no
:start
set a=%a: =%
set c=%b%-%a%
set "c=%c: =%"
set n=0
net user >>E:\userchk\"%c%-%computername%.txt"
for /f "skip=4 tokens=1,2,3 delims= " %%i in ( E:\userchk\%c%-%computername%.txt ) do   net user %%i && net user %%i >>E:\userchk\%c%-
%computername%.txt & net user %%j >>E:\userchk\%c%-%computername%.txt & net user %%k >>E:\userchk\%c%-%computername%.txt & set /a
n=1+!n!
echo user'Num is !n!
net use q: \\10.101.22.*\UserCHK\FFP  passwd/user:superadmin
copy E:\userchk\%c%-%computername%.txt q:\