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

Batch file 批处理,混合语法与Gow,SCP在for循环中,batch-file,for-loop,scp,Batch File,For Loop,Scp,我正在用批处理制作这个小脚本,它是关于从多个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!\!m

我正在用批处理制作这个小脚本,它是关于从多个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循环的第一次迭代中起作用,但不会在第二次迭代中起作用,因为在第二次迭代中,我的所有变量都是这样的:
!瓦尔,似乎不起作用。

最有可能的是,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
)

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

很可能,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
)

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

我没有看到任何定义的变量。它一次都不应该起作用!我没有看到这些变量的定义。它一次都不应该起作用!