批处理中用FOR循环实现windows补丁自动安装
测试程序
@ECHO OFF
REM 放在补丁目录下直接运行
@IF NOT EXIST 1 MKDIR 1 2 3 4
@FOR %%E IN (*.exe) DO @( (@FINDSTR UPDFILE %%E && @MOVE %%E 1) || (@FINDSTR _SFX_CAB_EXE_PACKAGE %%E && @MOVE %%E 2) || (@FINDSTR update.exe %%E && @MOVE %%E 3) || (@FINDSTR _SFX_CAB_EXE_PATH %%E && @MOVE %%E 4))
@echo 测试完毕
@IF not EXIST *.exe (goto OK) else (goto Detect)
:Detect
@FOR %%F IN (*.exe) DO @echo %%F 需要手动安装
@ECHO .
@ECHO .
@Pause
exit
:ok
@ECHO 所有补丁都可以自动安装
@echo 你的补丁已经被分别放在 目录 1 2 3 4 中。
@echo .
@PAUSE
exit (updated at 2006/09/12)
****** 主程序
@echo off
@cls
@TITLE XP 补丁无人职守智能安装程序安静版 __ BY SUN DaYan-YiFei
@echo XP 补丁无人职守智能安装程序安静版
@echo BY SUN DaYan-YiFei
@echo 适用补丁 98/2000 /XP/2003
@echo *
@ECHO *
@ECHO * 请确定把该程序放在你的补丁目录下,
@ECHO *
@ECHO * 开始执行程序, Press any key to start
@echo *
@pause
@if not exist backup MKDIR BACKUP
FOR %%E IN (*.exe) DO @((@FINDSTR UPDFILE %%E >null && @START /WAIT %%E /Q && @MOVE %%E BACKUP && @echo %%E Patched and Moved to Backup Directory …) || (@FINDSTR _SFX_CAB_EXE_PACKAGE %%E >null && @START /WAIT %%E /passive /norestart /o /n && @MOVE %%E BACKUP && @echo %%E Patched and Moved to Backup Directory …) || (@FINDSTR update.exe %%E >null && @START /WAIT %%E -n -o -z && @MOVE %%E BACKUP && @echo %%E Patched and Moved to Backup Directory …) || (@FINDSTR _SFX_CAB_EXE_PATH >null && @START /WAIT %%E /passive /norestart /o /n && @MOVE %%E BACKUP && @echo %%E Patched and Moved to Backup Directory …))
@ECHO ;;
@ECHO ;; OK ! 若补丁目录仍然有个别的补丁未能自动执行,请手动安装!
@PAUSE
@echo ;;========================================
@echo BY SUN YIFEI-DaYan
@echo 1:35 2006-4-25
@pause
@exit
将该批处理程序和补丁程序放在同一个目录下,直接运行
(注:已经在xp和2003下测试,该程序通用)
For在iptables中的应用
EXT_IF=”eth0″
INT_IF=”eth1″
EXT_IP=”" #公网IP
INT_IP=”" #内接口IP
SERVER_IP=”" #内部服务器IP
…….
FWD_TCP_PORT=”20 21 25 80 110″
FWD_UDP_PORT=”20 21 25 80 110″
……
for PORT in $TRUSTED_LOCAL_TCP_PORT; do
iptables -A INPUT -i $EXT_IF -p tcp –dport $PORT -m state –state NEW -j
ACCEPT
done
总结一下,适当的使用for可以大大增加程序的可伸缩性,例如对于for在shell中的应用,要想再屏蔽或者开放某个端口,仅仅只要将端口号放在开始定义的变量里面。