我的确切过程如下所示:
- 从 FTP 下载.zip文件
- 将.zip文件解压缩到新文件夹中
- 删除本地.zip文件
- 删除 FTP .zip文件
我编写了以下脚本来每天通过Windows任务推送它。在从FTP中删除文件之前,有什么简单的方法可以仔细检查?在批处理文件中比较文件名似乎很复杂。也许检查文件计数?
rem write FTP-download file
echo open Server >>ftpDownload.text
echo user >>ftpDownload.text
echo Password >>ftpDownload.text
echo cd /out >>ftpDownload.text
echo lcd c:DownloadUPS >>ftpDownload.text
echo binary >>ftpDownload.text
echo prompt >>ftpDownload.text
echo mget *.zip >>ftpDownload.text
echo quit >>ftpDownload.text
rem execute ftp file
ftp -s:ftpDownload.text
del ftpDownload.text
cd C:DownloadUPS
rem create foldername
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%a%%b%%c%%d
echo %cdate%
md download%cdate%
rem extract .zip
C:DownloadUPS7zcommandline7za.exe x *.zip -ppassword -oc:DownloadUPSdownload%cdate% -y
del *.zip
rem write ftp-delete file
echo open Server >>ftpDelete.text
echo user >>ftpDelete.text
echo Password >>ftpDelete.text
echo cd /out >>ftpDelete.text
echo binary >>ftpDelete.text
echo prompt >>ftpDelete.text
echo mdel *.zip >>ftpDelete.text
echo quit >>ftpDelete.text
ftp -s:ftpDelete.text
del ftpDelete.text
感谢您的评论,也许您也可以帮助我制定批量编码标准,我的技能非常基本;)
我假设您的问题是,如何确保仅删除之前成功下载的那些ZIP文件。
在for
循环中提取 ZIP 文件,并为每个文件显式生成 del
命令:
echo open Server >>ftpDelete.text
echo user >>ftpDelete.text
echo Password >>ftpDelete.text
echo cd /out >>ftpDelete.text
echo binary >>ftpDelete.text
for %%a in (*.zip) do (
C:DownloadUPS7zcommandline7za.exe x %%a -ppassword -oc:DownloadUPSdownload%cdate% -y
echo del %%a >>ftpDelete.text
)
echo quit >>ftpDelete.text
ftp -s:ftpDelete.text
del ftpDelete.text
或者使用可以通过掩码以事务方式下载和删除文件的 FTP 客户端。
例如,使用WinSCP FTP客户端,您可以使用:
winscp.com /command ^
"open ftp://user:password@server/" ^
"get -delete /out/*.zip c:DownloadUPS*" ^
"exit"
cd C:DownloadUPS
rem Your extract code follows
有关更多详细信息,请参阅使用 WinSCP 从 FTP 服务器自动传输文件的指南。
(我是WinSCP的作者)