You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何优化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提示,显示具体发送目标,方便排查执行情况

方案二:用外部文本文件存储主机列表(适合大量主机场景)

如果主机数量非常多,把主机名维护在单独的文本文件里会更方便,无需修改脚本即可更新主机列表:

  1. 创建一个hosts.txt文件,每行写一个主机名:
hostname1
hostname2
hostname3
  1. 对应的批处理脚本:
@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:20:42