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

如何编写监测源文件夹变更自动复制文件并重启服务的批处理程序

Windows Batch 实现文件夹变更自动同步+指定服务重启

不用安装第三方工具,靠Windows系统自带命令就能实现,稳定性比手写循环扫文件的方案好很多。

实现逻辑

  • 用系统自带robocopy工具的原生监测能力识别文件新增、修改事件,不用手写逻辑对比文件修改时间/哈希,资源占用低
  • 检测到变更后自动增量同步文件到目标目录,只传输有变动的文件,同步速度快
  • 同步完成后自动重启指定服务,既避免文件被服务进程占用导致同步失败,也能保证服务加载到最新的文件

可直接使用的批处理代码

把下面代码存成.bat后缀的文件,修改完开头的配置项就能直接运行:

@echo off
chcp 65001 >nul
:: ========== 以下配置项按自己实际情况修改 ==========
:: 要监测的源文件夹路径
set "SOURCE_DIR=C:\your\source\folder"
:: 同步的目标文件夹路径
set "TARGET_DIR=D:\your\target\folder"
:: 要重启的服务的服务名(注意不是服务显示名)
set "SERVICE_NAME=YourServiceName"
:: 兜底监测间隔,单位分钟,填1即可
set "CHECK_INTERVAL=1"
:: ==============================================

:: 启动时先执行一次全量同步
echo 启动初始全量同步...
robocopy "%SOURCE_DIR%" "%TARGET_DIR%" /E /COPY:DAT /R:3 /W:2 /NFL /NDL /NJH /NJS
echo 初始同步完成,已进入文件夹监测状态。

:loop
:: /MON:1 代表检测到至少1个文件变更就触发同步,/MOT为兜底轮询间隔
robocopy "%SOURCE_DIR%" "%TARGET_DIR%" /E /COPY:DAT /R:3 /W:2 /MON:1 /MOT:%CHECK_INTERVAL% /NFL /NDL /NJH /NJS

echo 检测到文件变更,同步完成,正在重启服务...
:: 停止服务,等待2秒给进程释放文件占用
net stop "%SERVICE_NAME%"
timeout /t 2 /nobreak >nul
:: 启动服务
net start "%SERVICE_NAME%"
echo 服务重启完成,继续监测。
goto loop

使用踩坑提示

  • 服务名一定不要填服务管理器里显示的中文名称,要双击对应服务,在弹出的属性窗口里复制「服务名称」栏的内容填进去,否则启停服务的指令会执行失败
  • 运行批处理的时候右键选择「以管理员身份运行」,否则会因为权限不足没法操作系统服务、读写受限目录
  • 如果需要同步文件夹权限、所有者信息,把代码里的/COPY:DAT换成/COPYALL就行;如果不需要递归同步子文件夹,把/E参数删掉
  • 有不需要同步的文件类型,就在robocopy那行最后加参数,比如/XF *.tmp *.bak就会过滤掉临时文件、备份文件
  • 如果服务停止速度慢,把timeout /t 2里的数字改大,比如改成5,等服务完全退出再启动,避免启动报错
  • 要开机自动运行的话,给这个bat文件建个快捷方式,扔到shell:startup打开的启动文件夹里,记得把快捷方式属性设置为以管理员身份运行

内容的提问来源于stack exchange,提问作者Ayan Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:03:20