在Windows系统下,通常使用共享文件夹结合任务计划方式实现文件定期自动拷贝至异机,本文中给出另一种方式即通过FTP进行拷贝。简单FTP命令中需指定文件名,但由于需拷贝文件名不固定,因此对BAT脚本进行了改造,使其自动获取文件名并调用FTP进行传输,详细介绍如下。
首先cmd执行ftp,确认windows系统已有ftp程序(一般操作系统默认自带),然后新建txt文件,写入如下命令并对应修改后修改后缀为bat
@Echo Off
setlocal enabledelayedexpansion
rem 准备执行
set src_dir=D:\DBbackup\
rem 设置文件所在目录
rem 定义变量filename用于存放目标文件名
set filename=""
set ftpdolog="D:\DBbackup\Run\FTPLOG.txt"
rem 设置FTP命令临时txt
set loginfo="D:\DBbackup\RunLog\ LOG.txt"
rem 设置整体操作日志
cd /d %src_dir%
for /f %%a in ('dir /s /o-d /tc /b ') do (
set filename=%%~na%%~xa
if not !filename! == "" ( goto iconv )
)
rem 其中最关键是/o-d,表示按照文件创建日期从后到先排序
:iconv
rem echo %filename%
rem 实际输出的是最新的文件名,带后缀
set user=ftp用户名
set pawd=ftp密码
Echo open 异机FTP服务器IP>%ftpdolog%
rem 如果FTP服务器非默认21端口,则此处IP+空格+新端口,如open 192.168.1.100 2100
Echo %user%>>%ftpdolog%
Echo %pawd%>>%ftpdolog%
Echo cd 项目管理系统数据库>>%ftpdolog%
Echo binary>>%ftpdolog%
Echo prompt>>%ftpdolog%
Echo mput %src_dir%%filename%>>%ftpdolog%
Echo bye>>%ftpdolog%
rem 将ftp命令写入临时FTP命令txt中,待后续调用
FTP -s:%ftpdolog%>>%loginfo%
rem 此处>>是将日志追加写入,也可改成一个箭头>每日覆盖日志
rem FTP调用日志文件 -s
echo %DATE%%time%>>%loginfo%
del %ftpdolog% /q
rem 最后删除无用的ftp命令临时txt
此时,直接运行该BAT即可将设定文件夹中最新单个文件拷贝至FTP服务器,通过合理配置生成时间及计划任务执行时间即可实现定期自动将文件FTP拷贝至异机。
当存在多个文件需要拷贝时,需要将多个文件分文件夹存放,同时配置多个如上BAT命令,最后另行编写BAT脚本如下进行统一调用,路径及文件名自行修改
@echo off
rem 通过FTP方式,拷贝数据库至FTP服务器
call D:\DBbackup\FTPCOPYBAT\FTPCopyBAT1.bat
call D:\DBbackup\FTPCOPYBAT\FTPCopyBAT2.bat
call D:\DBbackup\FTPCOPYBAT\FTPCopyBAT3.bat
rem 如此可继续添加
1、目前bat脚本是通过识别并输出文件夹中最新文件文件名传递给FTP进行传输,暂无法限定识别特定后缀名
2、需要在防火墙中对应添加至FTP服务器的入站规则
3、部分杀毒软件会默认拦截此类调用FTP命令操作,因此需要注意杀毒软件中添加例外。
4、共享文件夹方式拷贝文件bat如下
net use \\异机IP地址\共享文件夹 /d /y
net use \\异机IP地址\共享文件夹 "异机密码" /user:"异机用户名"
robocopy G:\文件夹 *.dmp \\异机IP地址\共享文件夹 /maxage:7
rem *.dmp或*.bak设定文件后缀名
rem maxage为拷贝最近7天文件,7天前的文件不在拷贝范围内
rem 此为注释
net use \\异机IP地址\共享文件夹 /d /y