Gra*_*per 4 windows ftp batch-file
为本地找到了几种解决方案,但需要一种用于 FTP 操作:
我有一个每日批处理脚本来在本地备份 MySQL 数据库,但是我也将它们 ftp 到备份服务器。
在本地,我使用forfiles删除超过 14 天的文件:
forfiles -p "C:\whatever" -s -m *.* -d 14 -c "cmd /c del @path"`
Run Code Online (Sandbox Code Playgroud)
我想在 FTP 上做同样的事情,一旦最新的备份文件被转储到运行在 Windows Server 2008 R2 上的 FTP 服务器中。
如何扩展我的批处理文件以执行此操作?
cd\[path to directory where files are saved]
echo off
echo user [ftp username]>ftpup.dat
echo [ftp password]>>ftpup.dat
echo binary>>ftpup.dat
echo put [FullBackup.%backupdate%.zip]>>ftpup.dat
echo quit>>ftpup.dat
ftp -n -s:ftpup.dat [myserver.com]
del ftpup.dat
Run Code Online (Sandbox Code Playgroud)
捕获您感兴趣的文件列表
echo user [ftp username]>ftpdir.txt
echo [ftp password]>>ftpdir.txt
echo dir . ftplist.txt >>ftpdir.txt
echo quit>>ftpdir.txt
ftp -n -s:ftpdir.txt [myserver.com]
Run Code Online (Sandbox Code Playgroud)准备ftp删除脚本
echo user [ftp username]>ftpdel.txt
echo [ftp password]>>ftpdel.txt
Run Code Online (Sandbox Code Playgroud)处理清单
for /f "tokens=6,7,8,*" %%a in (ftplist.txt) do (
echo %%d
)
Run Code Online (Sandbox Code Playgroud)在循环内,提取文件日期。
echo %%c %%a %%b - %%d
Run Code Online (Sandbox Code Playgroud)
并将月份名称转换为数字
call :month %%a
Run Code Online (Sandbox Code Playgroud)
您可以使用http://www.dostips.com/DtTipsStringManipulation.php 中的例程
在循环内,将日期转换为自今天起的天数
call :days %%c %month% %%b
Run Code Online (Sandbox Code Playgroud)
这是对使用 Fliegel-Van Flandern 算法计算天数的例程的调用。有关详细信息和实现,请参阅此 SO 问题如何检查 Windows 批处理脚本中文件的时间戳创建?
最后,在循环内,比较结果数字,如果它大于 14,则将文件添加到文件中以删除 ftp 脚本
IF !days! GEQ 14 echo DEL %%d >>ftpdel.txt
Run Code Online (Sandbox Code Playgroud)完成ftp del脚本并执行
echo quit>>ftpdel.txt
ftp -n -s:ftpdel.txt [myserver.com]
Run Code Online (Sandbox Code Playgroud)使用内置的 实现很麻烦ftp.exe,正如@PA 的很好的答案。显示。
您最好使用一些更强大的可编写脚本的 3rd 方 FTP 客户端。
例如使用WinSCP FTP 客户端,它就像:
winscp.com /ini=nul /log=delete.log /command ^
"open ftp://username:password@ftp.example.com/" ^
"rm /remote/path/*<14D" ^
"exit"
Run Code Online (Sandbox Code Playgroud)
请参阅具有时间限制的文件掩码。
(我是 WinSCP 的作者)
| 归档时间: |
|
| 查看次数: |
13351 次 |
| 最近记录: |