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

时间:2016-05-13 14:54:49

标签: 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_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_script.txt包含上述FTP命令,其中明确指出了值。如何完成循环以便我可以从Windows命令行执行一个命令但更新多个域上的文件?

另外,我想在FTP脚本中添加一个命令来验证test.txt的新内容。

我正在运行的批处理文件的当前版本是: `

@echo off
setlocal EnableDelayedExpansion

FOR /F "tokens=1,2,3 delims= " %%a in (ftp_config.txt) do (
  echo %%a
  echo %%b
  echo %%c
  call :SUB_ftp_cmd %%a %%b %%c
  )
::exit

:SUB_ftp_cmd
echo open %1>ftp.txt
echo %2>>ftp.txt
echo %3>>ftp.txt
echo cd /public_html>>ftp.txt
echo bin>>ftp.txt
echo hash>>ftp.txt
echo put "test.txt">>ftp.txt
echo close>>ftp.txt
echo bye>>ftp.txt

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

::del ftp.txt

::exit /b

`

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

open 
ECHO is off.
ECHO is off.
cd /public_html
bin
hash
put "test.txt"
close
bye

`

我添加了setlocal EnableDelayedExpansion以尝试解决变量未正确传递给子例程的事实,但它没有改变结果。

1 个答案:

答案 0 :(得分:0)

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

@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

如果您确实需要在外部文件use for command to read the file中配置参数:

@echo off

FOR /F "tokens=1,2,3" %%i in (config.txt) do call :download %%i %%j %%k

exit

:download
echo open %1>ftp.txt
echo %2>>ftp.txt
echo %3>>ftp.txt
echo cd /public_html>>ftp.txt
echo bin>>ftp.txt
echo hash>>ftp.txt
echo put "test.txt">>ftp.txt
echo close>>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