我的确切过程如下:
我编写了以下脚本,每天通过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:\DownloadUPS\7zcommandline\7za.exe x *.zip -ppassword -oc:\DownloadUPS\download%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
感谢您的评论,也许您可以帮助我批量编码标准,我的技能非常基本;)
答案 0 :(得分:0)
我认为您的问题是,如何确保仅删除之前已成功下载的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:\DownloadUPS\7zcommandline\7za.exe x %%a -ppassword -oc:\DownloadUPS\download%cdate% -y
echo del %%a >>ftpDelete.text
)
echo quit >>ftpDelete.text
ftp -s:ftpDelete.text
del ftpDelete.text
或使用可通过掩码以事务方式下载和删除文件的FTP客户端。
例如,使用WinSCP FTP client,您可以使用:
winscp.com /command ^
"open ftp://user:password@server/" ^
"get -delete /out/*.zip c:\DownloadUPS\*" ^
"exit"
cd C:\DownloadUPS
rem Your extract code follows
有关详情,请参阅automating file transfers from FTP server using WinSCP指南。
(我是WinSCP的作者)