打印

windows bat 脚本自动化 系列

windows bat 脚本自动化 系列

已经更新“号段转换教本”见 33#



本人每天要检查DB2数据是否完整,特地编写了一个批处理文件自动执行,大大减轻了工作负担。
本文没有什么特别由技术含量的东西,只是希望对朋友们编写windows 下批处理文件有些参考和帮助。
本批处理文件使用一些比较经典的方法:包含for 循环,批处理传递参数,go语句,find语句,db2连接数据库.


d:\db2\bin\check.bat

rem 自动检查给定日期的数据是否完整
rem 给定一个日期,将检查所有库当天的数据是否完整
rem 给定一个日期,程序执行一个FOR循环依次检查所有库的数据情况
rem 并根据结果判断是否所有日志完整:
rem     所有数据完整给出提示:数据全部正确
rem     不完整,给出提示,并显示具体的查询记录,可以具体看那个库不完整


rem  运行本程序,需要事先在本机安装DB2 命令行客户端;以及注册相关的数据库名字
rem  本程序是在XP+DB2 8.1 客户端下通过

if "%1"==""  goto tishi

cls
echo "自动检查%1日志入库是否完整">check.log

@ccho off
for %%f in (k1,k2,k3,k4,k5,k6,k7,k8 ) do call check0.bat %%f %%1

@echo off
find /v "-----------" check.log >check1.log
find /v "1          " check1.log >check.log

echo ""
echo ""
echo ""
echo "+++++++++++++++++++检查结果+++++++++++++++++++"

find "24" check.log /c | find "8" /c

@echo off
goto answer%errorlevel%
:answer0
echo OK! 数据全部正确!
goto end1


:answer1
echo ERROR: 数据不完全正确 具体参见check.log
type check.log
echo ERROR: 数据不完全正确 具体参见check.log
goto end1

:end1

@echo off
goto end

:tishi
cls
@echo off
echo usage: %0 yyyy-mm-dd
echo sample:%0 2007-05-11
goto end


:end
echo "+++++++++++++++++++检查结果+++++++++++++++++++"
@echo on


d:\db2\bin\check0.bat
@echo off
rem 自动检查 某库  某日数据是否完整
rem 检查结果保存到当前目录check.log 里面
rem 检查 base 是否包含指定日期的24条记录
rem 如果24条记录都有,则数据完整,否则不完整
rem 使用方法:  check0.bat 库 日期
rem 使用例子:  check0.bat k1 2007-05-01


if "%2"==""  goto tishi


echo "===========================%1===========================">>check.log
db2 connect to %1 user db2 using pass
db2 select count(*) from base where send like '%2%%' group by '%2' >>check.log
db2 connect reset
goto end

:tishi

@echo off
echo usage: %0 库 yyyy-mm-dd
echo sample: %0 k1  2007-08-15

:end

[ 本帖最后由 a龙 于 2007-12-17 23:46 编辑 ]

TOP

没什么时候需要用到的..
每一天都在努力

TOP

把windows bat 进行到底(ftp 自动化)

本人写这些东西,并不是局限于本人的应用,而是希望能给大家一些启发。
windows下命令行对系统管理员还是很有用。


本人每天都要检查FTP上的文件是否完整,所以决定编一个BAT帮我自动完成。

过程是这样:每天,我们有多个地区通过FTP把其他地方的重要数据传回到公司FTP服务器上存档,每个小时1个文件。
文件存放方式为按地区保存到不同的目录;文件名称为sm_2007-08-01-1.txt .....sm_2007-08-01-24.txt共24个文件。
如/d1/sm_20007-08-01-1.txt 表示d1地区2007-08-01第一个文件。

bat文件就是自动执行检查任务,看是否所有的文件都有,并输出检查结果。

本bat批处理文件涉及到for循环,ftp自动运行。

=============================
checkftp.bat   主程序

echo >result.txt

if "%1"==""  goto tishi


@echo off
for %%f in (d1,d2,d3,d4,d5,d6,d7,d8) do call ftp0.bat %%f %%1

cls

@echo off
echo ==============================================
echo 数据回传检查结果:%1:
echo ==============================================

type result.txt

echo ==============================================
echo  数据回传检查结果:%1:
echo ==============================================

goto end

:tishi
cls
@echo off
echo usage: %0 yyyy-mm-dd
echo sample:%0 2007-05-11
goto end


:end
@echo on


========================================
ftp0.bat


if "%2"==""  goto tishi
@echo open 192.168.11.4 >ftpcmd.txt
@echo user>>ftpcmd.txt
@echo >>ftpcmd.txt
@echo cd %1>>ftpcmd.txt
@echo ls sm_%2* list.txt>>ftpcmd.txt
@echo
@echo bye>>ftpcmd.txt


@echo off
ftp  -s:ftpcmd.txt  > 1.txt
del ftpcmd.txt
del 1.txt


find "%2" list.txt /c | find "24" /c

goto answer%errorlevel%
:answer0

@echo OK! %1 %2  数据完整! >>result.txt
goto end1


:answer1
cls
@echo ERROR: %1 %2 数据不完整 具体参见result.txt >>result.txt
type list.txt        >>result.txt
goto end1

:end1
goto end

:tishi
cls
@echo off
echo usage: %0 地区 yyyy-mm-dd
echo sample:%0 d1 2007-05-11
goto end


:end
@echo on

[ 本帖最后由 comsyschen@163.com 于 2007-8-20 12:11 编辑 ]

TOP

把windows bat 进行到底(用户管理 自动化)
本批处理脚本,涉及到以下几个方面
1.用命令行批量添加用户,并设置相应的主目录,权限,共享等
2.使用了for命令从文件中提取单词,并做为参数传递给另外一个批处理文件.
3.本文主要对需要批量添加、设置、共享用户的管理员有一定的参考价值



==================================================================================
rem usernew.bat
rem 新装一台服务器,要批量添加用户
rem 创建用户主目录
rem 设置只有用户自己能访问自己的共享文件夹
rem 把用户原来服务器上的文件拷贝到新服务器上

rem 用户名称保存在username.txt中,是从原来的AD导出的,每行一个用户名称

for /F  %%username in (username.txt) do call user0.bat %%username
==================================================================================
rem user0.bat
rem 给定一个用户名称
rem 在AD里添加该用户,默认密码为12345678

net user %1  12345678  /fullname:"%1"   /homedir:\\app03\%1   /add
mkdir e:\home\%1
cacls e:\home\%1  /e /r Users
cacls e:\home\%1  /e /t /c  /p  %1:F
net share yxu=e:\home\%1 /GRANT:%1,FUll
robocopy \\192.168.10.4\%1 e:\home\%1   /MIR /W:0 /R:1 /NP


=================================================================================
username.txt 范例
user1
user1
user3
usern

TOP

嘿嘿,我现在开始喜欢上bat了~~
方便很多啊~`不过次次都是要到命令行下去弄
每一天都在努力

TOP

vvvvvv

TOP

把windows bat 进行到底(多重循环 时间循环 自动化)
本批处理脚本,涉及到以下几个方面
1.两重循环
2.有效处理日期
3.检查每天的日志文件是否存在,日志文件文件名称为yyyymmdd.log
4.本文仅仅是一个范例,各位可以自己编写自己的脚本,来满足自己的需求.

+++++++++++++++++checksum.bat+++++++++++++++++
echo 检查每天的日志文件>result.txt
@echo off
for %%i in (01,02,03,04,05,06,07) do @call checksum1.bat %%i
type result.txt


+++++++++++++++++checksum1.bat+++++++++++++++++

if "%1"="" goto end

goto %1

:01
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31) do call checksum0.bat %1 %%j
goto end

:02
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28) do call checksum0.bat %1 %%j
goto end

:03
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31) do call checksum0.bat %1 %%j
goto end

:04
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30) do call checksum0.bat %1 %%j
goto end

:05
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31) do call checksum0.bat %1 %%j
goto end

:06
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30) do call checksum0.bat %1 %%j
goto end

:07
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31) do call checksum0.bat %1 %%j
goto end

:08
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31) do call checksum0.bat %1 %%j
goto end

:09
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30) do call checksum0.bat %1 %%j
goto end

:10
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31) do call checksum0.bat %1 %%j
goto end

:11
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,30) do call checksum0.bat %1 %%j
goto end

:12
@echo ==============月份:20%1月==================>>result.txt
for %%j in (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31) do call checksum0.bat %1 %%j
goto end

:end
echo on

+++++++++++++++++checksum0.bat+++++++++++++++++

rem echo 日期 %1 %2:
if exist 2007%1%2.log echo 2007%1%2.log  >>result.txt

+++++++++++++++++一个运行结果+++++++++++++++++

D:\>type result.txt
检查每天的日志文件
==============月份:2001月==================
==============月份:2002月==================
==============月份:2003月==================
==============月份:2004月==================
==============月份:2005月==================
==============月份:2006月==================
20070605.log
==============月份:2007月==================
20070731.log

[ 本帖最后由 comsyschen@163.com 于 2007-8-22 13:38 编辑 ]

TOP

用ipsecpol作为防火墙,加固服务器得安全
ipsecpol是包含在windows  Resource Kit 里得一个工具,十分方便/强大,又不需要占用系统额外得资源

++++++++++++++++++++++++++++
go20007.bat
++++++++++++++++++++++++++++

ipsecpol      -w REG  -p "FileShare" -y
ipsecpol      -w REG  -p "FileShare" -o

rem allow server1 允许指定的服务器互相访问
ipsecpol   -x -w REG  -p "FileShare"   -r "server1"       -n PASS  -f 0+208.194.80.243
ipsecpol   -x -w REG  -p "FileShare"   -r "server1"       -n PASS  -f 0+208.194.80.247


rem allow ping 允许icmp
ipsecpol   -x -w REG  -p "FileShare"   -r "icmp1"          -n PASS  -f 0+*::ICMP

rem DNS CLIENT
ipsecpol   -x -w REG  -p "FileShare"   -r "dns-client1"   -n PASS  -f 0+*:53:TCP
ipsecpol   -x -w REG  -p "FileShare"   -r "dns-client2"   -n PASS  -f 0+*:53:UDP

rem allow http  允许访问smtp pop3 dns
ipsecpol   -x -w REG  -p "FileShare"   -r "dns1"          -n PASS  -f 0+*:53:UDP
ipsecpol   -x -w REG  -p "FileShare"   -r "dns2"          -n PASS  -f 0+*:53:TCP


rem allow http  允许访问WWW
ipsecpol   -x -w REG  -p "FileShare"   -r "www1"          -n PASS  -f 0:80+208.83.240.0/255.255.240.0::TCP
ipsecpol   -x -w REG  -p "FileShare"   -r "www2"          -n PASS  -f 0:80+208.194.80.0/255.255.240.0::TCP



rem enable bios  允许访问网上邻居
ipsecpol   -x -w REG  -p "FileShare"   -r "netbiosudp14"          -n PASS  -f 0:445+218.194.80.0/255.255.254.0::TCP
ipsecpol   -x -w REG  -p "FileShare"   -r "netbiostcp14"          -n PASS  -f 0:445+211.83.240.0/255.255.240.0::TCP




rem deny any others 拒绝其他任何服务

ipsecpol   -x -w REG  -p "FileShare"   -r "0"        -n BLOCK -f 0+*::TCP
ipsecpol   -x -w REG  -p "FileShare"   -r "1"        -n BLOCK -f 0+*::UDP



====================================
如果要清楚上述设置,运行clear.bat就可以了

ipsecpol      -w REG  -p "FileShare" -y
ipsecpol      -w REG  -p "FileShare" -o

TOP

使用robocopy镜像2台服务器上的文件,安排为任务计划,每天晚上12:00运行。


sync.bat

robocopy \\118.194.80.253\f$\课件\规划办  f:\课件\规划办 /SECFIX /S /E /PURGE /X /R:1 /W:0  /NP  /LOG:规划办.log  

robocopy \\118.194.80.253\f$\课件\教务处  f:\课件\教务处 /SECFIX /S /E /PURGE /X /R:1 /W:0  /NP  /LOG:教务处.log  

robocopy \\118.194.80.253\f$\课件\图书馆  f:\课件\图书馆 /SECFIX /S /E /PURGE /X /R:1 /W:0  /NP  /LOG:图书馆.log  

robocopy \\118.194.80.253\f$\课件\宣传部  f:\课件\宣传部 /SECFIX /S /E /PURGE /X /R:1 /W:0  /NP  /LOG:宣传部.log  

robocopy \\118.194.80.253\f$\课件\学生处  f:\课件\学生处 /SECFIX /S /E /PURGE /X /R:1 /W:0  /NP  /LOG:学生处.log  

robocopy \\118.194.80.253\f$\课件\科技处  f:\课件\科技处 /SECFIX /S /E /PURGE /X /R:1 /W:0  /NP  /LOG:科技处.log  

robocopy \\118.194.80.253\f$\课件\团委  f:\课件\团委 /SECFIX /S /E /PURGE /X /R:1 /W:0  /NP  /LOG:团委.log

TOP

windows 脚本处理变量的能力还是很强的,可以是命令行参数,也可以是文件。

windows脚本 路径、文件解析

cls
rem 关于操作系统文件变量的命令行
@echo %%~0   删除任何前后引号                %~0
@echo %%~f0  展开到完全合格的路径名                 %~f0
@echo %%~d0  展开到驱动器号                %~d0
@echo %%~p0  展开到路径                %~p0
@echo %%~n0  展开到文件名                %~n0
@echo %%~x0  展开到文件扩展名                %~x0
@echo %%~s0  展开路径以只包含短名称                %~s0
@echo %%~a0  展开到文件的文件属性                %~a0
@echo %%~t0  展开到文件的日期和时间                %~t0
@echo %%~z0  展开到文件大小                %~z0
@echo %%~$PATH:0 PATH 环境变量所列出的目录        %~$PATH:0
@echo %%time%%                %time%
@echo %%date%%                %date%

pause

windows 脚本 变量传递 for
  for %f in (1,2,3,4,5,6) do echo %f    依次显示
  for %f in (*.txt) do type %f         显示所有*.txt文件的内容
  for  /F  %f  in(1.txt) do echo %f   解析文件到变量f
  for /F “tokens=1,2,3” %f in (2.txt) do echo %f  %g  %h  解析到多个变量,并可以指定对应关系



本人特地编写了测试脚本,以清楚的表明这些变量的使用方法  附件是完整脚本,含测试文本文件
cls
@echo 关于操作系统文件变量的命令行
@echo %%~0   删除任何前后引号                %~0
@echo %%~f0  展开到完全合格的路径名                 %~f0
@echo %%~d0  展开到驱动器号                %~d0
@echo %%~p0  展开到路径                %~p0
@echo %%~n0  展开到文件名                %~n0
@echo %%~x0  展开到文件扩展名                %~x0
@echo %%~s0  展开路径以只包含短名称                %~s0
@echo %%~a0  展开到文件的文件属性                %~a0
@echo %%~t0  展开到文件的日期和时间                %~t0
@echo %%~z0  展开到文件大小                %~z0
@echo %%~$PATH:0 PATH 环境变量所列出的目录        %~$PATH:0
@echo %%time%%                %time%
@echo %%date%%                %date%
pause

cls
@echo for 循环语句
@echo for %%f in (guizhou,hainan,fujian,guangxi,hubei,shanxi,yunnan,sichuan ) do @echo %%f
@for %%f in (guizhou,hainan,fujian,guangxi,hubei,shanxi,yunnan,sichuan ) do @echo %%f
pause

cls
@echo for 循环语句  显示所有*.log的文件内容
@echo for %%f in (*.txt) do @type %%f
@for %%f in (*.txt) do @type %%f
pause

cls
@echo for 循环语句  显示所有指定文件的每个变量
@echo
@echo for-test1.txt文件内容
@type for-test1.txt
@echo
@echo for /F %%f in (for-test1.txt) do @echo %%f
@for /F %%f in (for-test1.txt) do @echo %%f
pause


cls
@echo for 循环语句  依次给变量赋值
@echo
@echo for-test2.txt文件内容
@type for-test2.txt
@echo
@echo
@echo for /F %%f in (for-test2.txt) do @echo %%f %%g %%h
@echo 按行解析 分别赋值给f,g,h,  多余的忽略
@for /F  "tokens=1,2,3"  %%f  in (for-test2.txt) do @echo %%f %%g %%h
pause

cls
@echo for 循环语句  依次给变量赋值
@echo
@echo for-test2.txt文件内容
@type for-test2.txt
@echo
@echo
@echo for /F %%f in (for-test2.txt) do @echo %%f %%g %%h %%i
@echo 按行解析 分别赋值给f,g,h,其他给i
@for /F  "tokens=1,2,3*"  %%f  in (for-test2.txt) do @echo %%f %%g %%h %%i
pause

cls
@echo for 循环语句  依次给变量赋值
@echo
@echo for-test2.txt文件内容
@type for-test2.txt
@echo
@echo
@echo for /F %%f in (for-test2.txt) do @echo %%f %%g %%h
@echo 按行解析 2,4,5列 分别赋值给f,g,h
@for /F  "tokens=2,4,5"  %%f  in (for-test2.txt) do @echo %%f %%g %%h
pause

[ 本帖最后由 comsyschen@163.com 于 2007-9-11 17:15 编辑 ]

附件

for-test.rar (927 Bytes)

2007-9-11 17:13, 下载次数: 32

TOP


感谢一直以来您对我们的支持!
当前时区 GMT+8, 现在时间是 2008-12-5 01:50 京ICP证060528 号

Designed By 17DST