求助:如何优化CMD批量发送消息的批处理脚本?
批量发送CMD消息的批处理脚本优化
你的期望脚本无法直接运行,因为MSG命令的/SERVER参数不支持一次性传入多个逗号分隔的主机名,必须逐个调用命令处理单台主机。下面是两种可行的优化方案:
方案一:用变量存储主机列表,循环遍历执行
@ECHO OFF :: 定义主机列表,支持逗号或空格分隔 SET "hostnames=hostname1, hostname2, hostname3" SET "message=Hello User, Please update your laptop" :: 遍历每个主机名,逐个发送消息 FOR %%h IN (%hostnames%) DO ( MSG /SERVER:%%h /TIME:60 /v /w * %message% echo 已向 %%h 发送消息 ) pause ECHO ON
关键说明:
- 变量名改用
hostnames,避免和系统内置的hostname命令/变量冲突 - 使用
FOR循环遍历主机列表,%%h代表当前循环到的单个主机名 - 循环体内针对每台主机单独执行
MSG命令,确保命令格式符合要求 - 优化echo提示,显示具体发送目标,方便排查执行情况
方案二:用外部文本文件存储主机列表(适合大量主机场景)
如果主机数量非常多,把主机名维护在单独的文本文件里会更方便,无需修改脚本即可更新主机列表:
- 创建一个
hosts.txt文件,每行写一个主机名:
hostname1 hostname2 hostname3
- 对应的批处理脚本:
@ECHO OFF SET "message=Hello User, Please update your laptop" :: 读取hosts.txt中的每一行主机名,逐个发送消息 FOR /F "delims=" %%h IN (hosts.txt) DO ( MSG /SERVER:%%h /TIME:60 /v /w * %message% echo 已向 %%h 发送消息 ) pause ECHO ON
关键说明:
FOR /F "delims="用于读取文本文件的每一行,确保包含特殊字符的主机名也能被正确读取- 主机列表和脚本分离,添加/删除主机只需修改
hosts.txt,更易维护
内容的提问来源于stack exchange,提问作者Jamil Calope
相关产品推荐
相关产品推荐

