批处理,使用 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 命令继续完成。
我正在用批处理制作这个小脚本,它是关于从多个网络服务器 (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 命令继续完成。