在Windows命令行中为不同的服务器传递变量并循环FTP脚本

在Windows命令行中为不同的服务器传递变量并循环FTP脚本,windows,command-line,ftp,Windows,Command Line,Ftp,我想构建一个从Windows命令行运行的脚本,使用FTP将现有文件更新到多个web域。我想知道如何构建一个运行ftp命令并向其传递变量的循环 将参数传递给FTP脚本的文件格式为: ftp.domain1.com username1 password1 ftp.domain2.com username2 password2 等等 FTP脚本将具有以下命令: open "$variable_for_domain_name" $variable_for_username $variable_for_

我想构建一个从Windows命令行运行的脚本,使用FTP将现有文件更新到多个web域。我想知道如何构建一个运行ftp命令并向其传递变量的循环

将参数传递给FTP脚本的文件格式为:

ftp.domain1.com username1 password1
ftp.domain2.com username2 password2
等等

FTP脚本将具有以下命令:

open "$variable_for_domain_name"
$variable_for_username
$variable_for_password
cd /public_html
bin
hash
put "test.txt"
close
bye
使用此示例,循环的第一次迭代将执行以下FTP命令:

open "ftp.domain1.com" 
username1 
password1 
cd /public_html 
bin 
hash 
put "test.txt" 
close 
bye 
循环的第二次迭代将执行以下操作:

open "ftp.domain2.com" 
username2 
password2 
cd /public_html 
bin 
hash 
put "test.txt" 
close 
bye 
我理解在执行脚本后运行脚本:

c:\windows\system32\ftp.exe -i <ftp_script.txt
`

生成的文件
ftp.txt
包含以下内容: `

`


我添加了
setlocal EnableDelayedExpansion
,试图解决变量没有正确传递给子例程的问题,但它没有改变结果

最简单的方法是在批处理文件中创建一个子函数,并使用不同的参数多次调用它。这样,您不需要任何外部配置文件,因此不需要循环:

@echo off

call :download ftp.domain1.com username1 password1
call :download ftp.domain2.com username2 password2

exit

:download
echo open %1>ftp.txt
echo %2>>ftp.txt
echo %3>>ftp.txt
echo bye>>ftp.txt
ftp.exe -s:ftp.txt
del ftp.txt

exit /b

如果确实需要在外部文件中配置参数:

其中,
config.txt
具有您想要的格式:

ftp.domain1.com username1 password1
ftp.domain2.com username2 password2

最简单的方法是在批处理文件中创建一个子函数,并使用不同的参数多次调用它。这样,您不需要任何外部配置文件,因此不需要循环:

@echo off

call :download ftp.domain1.com username1 password1
call :download ftp.domain2.com username2 password2

exit

:download
echo open %1>ftp.txt
echo %2>>ftp.txt
echo %3>>ftp.txt
echo bye>>ftp.txt
ftp.exe -s:ftp.txt
del ftp.txt

exit /b

如果确实需要在外部文件中配置参数:

其中,
config.txt
具有您想要的格式:

ftp.domain1.com username1 password1
ftp.domain2.com username2 password2

不清楚你要什么。你能告诉我们你的完整代码和你运行它的方式吗?这可能有助于我们了解您想要什么。“我想知道如何构建一个运行ftp命令并向其传递变量的循环。”显然,他正在寻找有关
for
循环的信息。如何从文件中读取超出了my.cmd fu:-/祝您好运这是正确的,我正在查找有关运行for循环以及从windows命令行向该循环传递参数的信息。我没有任何示例代码,因为我不熟悉这个特定的环境。不清楚您需要什么。你能告诉我们你的完整代码和你运行它的方式吗?这可能有助于我们了解您想要什么。“我想知道如何构建一个运行ftp命令并向其传递变量的循环。”显然,他正在寻找有关
for
循环的信息。如何从文件中读取超出了my.cmd fu:-/祝您好运这是正确的,我正在查找有关运行for循环以及从windows命令行向该循环传递参数的信息。我没有任何示例代码,因为我不熟悉这个特定的环境。太好了,我可以尝试一下。关于如何在不将文件的全部内容输出到命令行窗口的情况下快速验证文件已成功上载并且与本地文件相同的任何想法。基本上,正在寻找一种方法来进行“区分”,并验证文件是否包含相同的数据。回声消失了。cd/public_html bin hash put“test.txt”close bye`diff:这是另一个问题,问问它。你尝试了哪个批处理文件?什么版本的Windows?你的
config.txt
看起来怎么样?我在Windows10上运行。我尝试使用第二个批处理文件,它将参数从
config.txt
文件传递到子例程中。
config.txt
文件如下所示:
ftp.domain1.com用户名1密码1 ftp.domain2.com用户名2密码2
很抱歉,在标记时遇到一些问题,但每个域、用户名、密码都在换行符上。我输入了一些调试代码来查看参数,因为它们是在传递到子例程之前从FOR循环创建的,并且它们是正确的,但是一旦传递到子例程中,它们似乎会生成
ECHO is off
语句。想法?太好了,我可以试试。关于如何在不将文件的全部内容输出到命令行窗口的情况下快速验证文件已成功上载并且与本地文件相同的任何想法。基本上,正在寻找一种方法来进行“区分”,并验证文件是否包含相同的数据。回声消失了。cd/public_html bin hash put“test.txt”close bye`diff:这是另一个问题,问问它。你尝试了哪个批处理文件?什么版本的Windows?你的
config.txt
看起来怎么样?我在Windows10上运行。我尝试使用第二个批处理文件,它将参数从
config.txt
文件传递到子例程中。
config.txt
文件如下所示:
ftp.domain1.com用户名1密码1 ftp.domain2.com用户名2密码2
很抱歉,在标记时遇到一些问题,但每个域、用户名、密码都在换行符上。我输入了一些调试代码来查看参数,因为它们是在传递到子例程之前从FOR循环创建的,并且它们是正确的,但是一旦传递到子例程中,它们似乎会生成
ECHO is off
语句。思想?
ftp.domain1.com username1 password1
ftp.domain2.com username2 password2