windows下批量换程序——运维常用
Windows 批量更新程序脚本:自动化替换与部署
在Windows服务器运维中,经常需要批量更新程序文件。手动操作不仅耗时,还容易出错。本文分享一个自动化脚本,通过FTP下载新程序、清理旧文件、替换程序并重启服务,实现一键式部署。配合Keeper等守护程序使用,可实现无人值守更新。
📌 脚本适用场景:
- 多台Windows服务器需要同时更新同一套程序
- 程序文件通过FTP集中分发
- 需要清理旧日志和临时文件
- 配合Keeper等守护进程实现自动拉起新进程
📜 一、完整脚本代码
将以下内容保存为 update.bat,以管理员身份运行:
@echo off :: Windows 批量程序更新脚本 :: 作者:运维笔记 :: 日期:2015-04-16 echo [1/7] 关闭Windows防火墙服务... net stop sharedaccess echo [2/7] 清理旧日志和临时文件... del /s d:\*.log d:\*.vbs d:\*.pdb d:\*.dmp 2>nul echo [3/7] 切换到D盘目标目录... D: cd D:\Newsvr echo [4/7] 连接FTP服务器下载新程序... ftp -n 192.168.1.1 <<EOF user admin admin cd guoyabin binary get aaa2015-4-16.exe get xxx2015-4-16.vbs bye EOF echo [5/7] 复制程序到各个目标目录... copy aaa2015-4-16.exe D:\Newsvr\aaa1 /Y copy aaa2015-4-16.exe D:\Newsvr\aaa2 /Y copy aaa2015-4-16.exe D:\Newsvr\aaa3 /Y copy aaa2015-4-16.exe D:\Newsvr\aaa4 /Y echo [6/7] 执行VBS脚本更新配置文件... cscript xxx2015-4-16.vbs //Nologo echo [7/7] 终止旧进程(等待Keeper自动拉起新程序)... taskkill /f /im aaa2015-4-15.exe echo 更新完成!请检查程序运行状态。
🔍 二、脚本逐行详解
2.1 前置处理
| 命令 | 作用说明 | 注意事项 |
|---|---|---|
net stop sharedaccess |
停止Windows防火墙/ICS服务 | Windows 7+可能无效,建议改用 netsh advfirewall set allprofiles state off |
del /s d:\*.log ... |
递归删除D盘下指定后缀的临时文件 | 2>nul 隐藏“找不到文件”的错误提示 |
2.2 FTP下载部分
脚本使用FTP命令行自动下载程序。关键点说明:
ftp -n表示禁用自动登录,后续用user命令手动登录binary设置传输模式为二进制(防止exe文件损坏)- 用户名和密码明文存储在脚本中,注意权限控制,避免泄露
- Windows 2003 不支持从资源管理器拖拽文件到FTP窗口,必须用命令行
2.3 文件替换与进程管理
- 多目录复制:
copy aaa2015-4-16.exe D:\Newsvr\aaa1 /Y将同一个新程序复制到多个目标目录(aaa1~aaa4),适用于多实例部署场景 - 配置文件更新:通过VBS脚本修改keeper等程序的配置文件内容
- 进程终止:
taskkill /f /im aaa2015-4-15.exe强制结束旧版本进程。/f表示强制终止
⚙️ 三、与Keeper程序的配合机制
脚本设计的最后一步是只杀死旧进程,而不主动启动新程序,这是为了配合Keeper守护程序的工作机制:
- Keeper定期检查:Keeper会监控指定进程的运行状态
- 检测到进程消失:当脚本执行
taskkill后,旧进程终止 - 自动拉起新程序:Keeper发现进程不存在,会按照配置自动启动新版本程序(此时新程序文件已被脚本复制到位)
- 确保版本一致:新启动的已经是
aaa2015-4-16.exe版本
这种设计的好处是:无需在脚本中硬编码启动命令,由Keeper统一管理启动参数和运行环境,更加灵活可靠。
⚠️ 四、重要注意事项
🔴 管理员权限
所有操作需要以管理员身份运行命令提示符,否则 net stop 和 taskkill 可能失败。
🔴 FTP密码安全
脚本中明文的FTP账号密码存在安全隐患。建议:
- 创建只读权限的专用FTP账户
- 执行后及时清理脚本或修改密码
- 考虑使用
ftp -s:script.txt方式分离凭证文件
🔴 文件路径确认
执行前请确认:
- D盘存在
\Newsvr\aaa1~aaa4等目标目录 - FTP服务器上存在对应的程序文件
- VBS脚本的路径引用正确
🔴 系统版本差异
net stop sharedaccess 在 Windows XP/2003 上有效,但在 Windows 7/8/10 上可能提示服务不存在。高版本系统建议使用:
netsh advfirewall set allprofiles state off
📝 五、扩展与改进建议
| 改进点 | 实现方式 | 优势 |
|---|---|---|
| 日志记录 | 添加 echo %date% %time% 操作成功 >> update.log |
方便追踪执行历史和错误 |
| 错误处理 | 检查 %errorlevel%,失败时发送告警 |
提高脚本健壮性 |
| 参数化 | 将IP、账号、文件名定义为变量 | 适应不同环境,减少修改 |
| 版本回滚 | 备份旧版本文件后再覆盖 | 更新失败时可快速恢复 |
✅ 验证更新结果:
脚本执行后,建议通过以下方式验证:
- 检查目标目录文件版本:
dir D:\Newsvr\aaa1\aaa*.exe - 查看进程是否已重启:
tasklist | findstr aaa - 检查Keeper日志确认自动拉起记录
本文详细解析了Windows批量更新脚本的每个步骤,以及与Keeper守护程序的配合原理。实际使用中请根据具体环境调整路径、文件名和FTP信息。欢迎收藏转发,如有问题请在评论区交流。

浙公网安备 33010602011771号