代码之家  ›  专栏  ›  技术社区  ›  Mr Brooze

批处理,在for循环中与Gow、SCP混合语法

  •  1
  • Mr Brooze  · 技术社区  · 10 年前

    我正在用批处理制作这个小脚本,它是关于从多个Web服务器(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! ,这似乎不起作用。

    1 回复  |  直到 10 年前
        1
  •  0
  •   dbenham    10 年前

    很可能,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命令继续完成。