请问自动上传特定目录到FTP服务器的BAT批处理怎样写?

大神,您好!我想定期增量将特定的目录上传到FTP服务器上某个目录下,请问如何写批处理?我描述下具体要求:
源目录结构为:E:\AAA\B001\C001,C002,C003,第一层目录AAA固定不变,第二层目录B001不断增加,第三层有多个目录,但是我只需要备份C003这个目录到FTP上(每个B***下都有一个C003),但是C003下的文件也是持续增加的(旧的B***下的C003下文件也会增加),上传到FTP上upload目录下时要保持源目录的目录结构,请问以上要求批处理能实现吗?非常感谢!

您可以使用cmd环境的rar,对所有B00n文件夹下的C003进行整体打包,然后上传各个打包的rar文件,我假定您AAA目录下所有B大头的目录都有C003子目录,并且都要备份上传。这个rar工具可以在winrar的安装目录下找到,拷贝到AAA目录下就行了。
按您的描述,增量备份用批处理可能会比较麻烦,我下面帮您写的是全量备份的,不过rar做的压缩包会保持文件的完整目录结构。
把下面的命令存为批处理文件:my_ftp_put_C003.bat,这个bat文件要放在AAA目录下。
@echo off
@set d=E:\AAA
@cd /d %d%
rem 下面三行是ftp的IP、用户名、密码,请自行替换
@set ftpip=127.0.0.1
@set ftpusr=username
@set ftppwd=password
@for /f "delims=" %%i in ('dir B* /ad /b') do @rar a AAA_%%i_C003.rar %%~fi\C003
@echo open %ftpip%>%d%\tmp.ftp
@echo %ftpusr%>>%d%\tmp.ftp
@echo %ftppwd%>>%d%\tmp.ftp
@for /f "delims=" %%i in ('dir AAA_B*.rar /b') do @echo put %%i >>%d%\tmp.ftp
@echo quit >>%d%\tmp.ftp
@ping -n 2 127.0.0.1 >nul
@ftp -s:%d%\tmp.ftp
@del %d%\tmp.ftp
上面有几行,在注释后面是ftp的ip地址、用户名、密码,您要改成您自己的。
以上批处理我已经在Win10+ftp的环境下测试过了,希望对您有帮助。追问

非常感谢您的用心回答!
因为我是上传到客户的FTP目录,所以不能进行压缩处理,经过与客户沟通,他们说可以不用保持目录结构,直接上传每个C003目录(每个B***下都有一个C003)下的文件上去就可以了,看看这样是不会好操作些?就是遍历每个B***下的C003目录,将文件传到FTP的upload目录下,关于增量上传的问题,是否可以让文件在上传时跳过相同的文件来解决?谢谢!

追答

增量有一个办法可以简单实现,就是每一个传过的文件,都修改一下文件名,统一加一个“_ftp”之类的后缀,上传文件把有后缀的过滤掉就行了。不过文件能否改名要看您那边是否允许了。
以下是全量更新的,C003目录结构也保存了。
@echo off
@set d=E:\AAA
@cd /d %d%
rem 下面三行是ftp的IP、用户名、密码,请自行替换
@set ftpip=127.0.0.1
@set ftpusr=username
@set ftppwd=password
@echo open %ftpip%>%d%\tmp.ftp
@echo %ftpusr%>>%d%\tmp.ftp
@echo %ftppwd%>>%d%\tmp.ftp
@echo prompt>>%d%\tmp.ftp
@for /f "delims=" %%i in ('dir B* /ad /b') do (
@echo mkdir %%i
@echo mkdir %%i\C003
@cd %%i\C003
@echo mput %d%\%%i\C003\*.*
@cd /
)
@echo quit >>%d%\tmp.ftp
@ping -n 2 127.0.0.1 >nul
@ftp -s:%d%\tmp.ftp
@del %d%\tmp.ftp

温馨提示:答案为网友推荐,仅供参考
相似回答