windows下使用bat脚本操作ftp服务器

白话

在一般的系统中都会存在ftp的文件上传与下载,根据应用场景的不同,在linux、UNIX一般使用shell脚本进行,近几天有同事说要在windows上写个文件上传下载的脚本,刚开始有点奇怪,但还是试试。具体的ftp命令不在此多缀述,可以在控制台下使用ftp -h命令进行查看。

抛砖引玉

一段简单的文件下载的bat脚本代码

@echo off
echo open 192.168.1.100>>ftp.tmp
echo test>>ftp.tmp
echo testtest>>ftp.tmp
echo get a.html>>ftp.tmp
echo bye>>ftp.tmp
ftp -i -s:ftp.tmp
del ftp.tmp
pause
@echo on

注意

在windows平台编写用于访问ftp服务器的bat脚本,不要直接命名为ftp.bat,不然一执行就不停的执行,死循环。在网上各种百度,只是有相同的情况,没见谁给个答案。在某强大的搜索引擎下,终于找到一个全理的答案[链接]

Change the name of the ftp.bat file to something like upload.bat or
download.bat - the problem occurs because both ftp.bat and ftp.exe are in
your path and windows executes the 1st occurence it finds (type ftp only can
reference either a .bat, .exe, .cmd or .com file) in this case ftp.bat thus
ftp.bat has an input file executing ftp, again 1st occurance is ftp.bat - so
the ftp.bat file keeps calling itself. If you must keep the batch file then
I would suggest:
ftp.bat contain:
ftp.exe -s:c:\ftp.txt
ftp.txt contain:
open “url or ip address”
username
password
commands…
quit

翻译成中文大概的意思就是

将文件名修改成upload.bat 或者 download.bat,这个问题是因为ftp.bat和ftp.exe这个两文件同时存在你的文件路径中,由于ftp.bat脚本有一个被输入的文件去执行ftp指令,windows在第一次执行的时候它发现了一个这样的ftp文件(这类ftp文件就能为.bat,.exe,.cmd,.com文件),所以在第一次执行后ftp.bat就不断的循环调用自身这个文件。如果坚持要使用ftp.bat命令这个脚本,建议使用下面这种方式
ftp.bat中的内容是:
ftp.exe -s:c:\ftp.txt
ftp.txt中的内容是:
open “url or ip address”
username
password
commands…
quit


文件上传的示例

echo off
echo "1[%1] 2[%2] 3[%3] 4[%4] 5[%5] 6[%6] 7[%7] 8[%8]"
:     1[username] 2[pwd] 3[ip] 4[port] 5[remotedir] 6[remotefile] 7[localfile] 8[chkfile]

echo open %3>>%6.ftp
echo %1>>%6.ftp
echo %2>>%6.ftp
echo mkdir %5>>%6.ftp
echo cd %5>>%6.ftp
echo bin>>%6.ftp
echo put %7 %6>>%6.ftp
echo ls %6 %8>>%6.ftp
echo bye>>%6.ftp 

:执行ftp命令
ftp -s:%6.ftp

rem 检查文件是否发送成功(英文版)
find "not found" %8
if %errorlevel% == 0 (del /q %8)

rem 检查文件是否发送成功(中文版)
find "找不到文件" %8
if %errorlevel% == 0 (del /q %8)

:退出
pause

上面代码中%1表示第一个参数(等同shell中的$1),:是注释。

你可能感兴趣的:(网络通信)