为什么将 ssh 上的 rsync 放在批处理文件的 FOR 循环内时不起作用?

为什么将 ssh 上的 rsync 放在批处理文件的 FOR 循环内时不起作用?

我已将 ff. 代码放在 rsync.bat 中:

for %%A in (%VAR_REMOTE_HOST%) do (
  set VAR_TARGET=%USER%@%%A:%VAR_TARGET_DIR%

  echo Rsync Source Dir: %VAR_SOURCE%
  setlocal ENABLEDELAYEDEXPANSION
  echo Rsync Target Dir: !VAR_TARGET!
  endlocal

  echo Syncing files...

  rsync -rltgDvzO --chmod=Dugo=rwX,Fugo=rw -e ssh %VAR_SOURCE% %VAR_TARGET%
)

其中 VAR_REMOTE_HOST 是以逗号分隔的服务器列表。

它会将文件列表以及权限、大小和时间戳输出到 rsync。它甚至会在末尾显示 rsync 日志(发送字节数、接收字节数、字节数/秒)。但是,文件不会发送到目标。就好像它进行了试运行一样。(但没有 -n 选项)

请参阅此处的屏幕截图。(http://postimg.org/image/vc0kei1j1/

有人遇到过这种情况么?

答案1

就像是进行了一次试运行一样。(但没有 -n 选项)

再次查看你的 rsync 行:

rsync -nrltgDvzO 

我清楚地看到-n那里有一个选择......

答案2

我找到了罪魁祸首!将 %VAR_TARGET% 更改为 !VAR_TARGET! 并将 endlocal 移至循环末尾。

新代码:

for %%A in (%VAR_REMOTE_HOST%) do (
  set VAR_TARGET=%USER%@%%A:%VAR_TARGET_DIR%

  echo Rsync Source Dir: %VAR_SOURCE%
  setlocal ENABLEDELAYEDEXPANSION
  echo Rsync Target Dir: !VAR_TARGET!

  echo Syncing files...

  rsync -rltgDvzO --chmod=Dugo=rwX,Fugo=rw -e ssh %VAR_SOURCE% !VAR_TARGET!
  endlocal
)

相关内容