我想构建一个从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
以尝试解决变量未正确传递给子例程的事实,但它没有改变结果。
答案 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