仅删除以前在批处理文件中使用文件掩码下载的那些 FTP 文件



我的确切过程如下所示:

  1. 从 FTP 下载.zip文件
  2. 将.zip文件解压缩到新文件夹中
  3. 删除本地.zip文件
  4. 删除 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的作者)

最新更新