批处理,使用 Gow 的混合语法,for 循环中的 SCP

Batch, hybrid syntax with Gow, SCP in a for loop

我正在用批处理制作这个小脚本,它是关于从多个网络服务器 (apache) 获取日志的,我在安装了 gow 的 IIS 服务器上(允许我使用 Linux cmd)。

在我的代码中有这个 for 循环:

setlocal enableDelayedExpansion

for /L %%X in (0,1,%end%) do (
    echo scp -l Brooze -pw Brooze !ip_vector[%%X]!:!mypathLogLX_cedre! !mypathLogLX_stock!\!mysite!\access_log
)

这有效,但是当我删除 echo 并只执行 scp 时,它在我的 for 循环的第一次迭代中有效,但在第二次迭代中无效,因为在第二次迭代中,我所有的变量都是这样的:!var!,这似乎不起作用。

很可能,scp 是一个批处理脚本 (scp.bat)。所以你需要使用

setlocal enableDelayedExpansion

for /L %%X in (0,1,%end%) do (
  call scp -l Brooze -pw Brooze !ip_vector[%%X]!:!mypathLogLX_cedre! !mypathLogLX_stock!\!mysite!\access_log
)

您的原始代码(没有 CALL)在第二次及以后的迭代中失败的原因是因为当 scp.bat 退出时,它终止了批处理文件上下文,因此不再启用延迟扩展。但是 FOR /L 命令继续完成。