簡體   English   中英

批處理文件以從 FTP 下載名稱以給定字符串開頭的文件

[英]Batch file to download a file with name that starts with a given string from FTP

我使用以下bat文件:

::@echo off
cd /d %0\.. 
set cmd=%CD%

echo user %~2> %cmd%\ftpcmd.dat
echo %~3>> %cmd%\ftpcmd.dat
echo bin>> %cmd%\ftpcmd.dat
IF NOT "%5" == "" echo cd %~5>> %cmd%\ftpcmd.dat
echo get %~4 %cmd%\%~4>> %cmd%\ftpcmd.dat
echo quit>> %cmd%\ftpcmd.dat
ftp -n -s:%cmd%\ftpcmd.dat %1
del %cmd%\ftpcmd.dat

參數和執行如下:

c:\download.bat  ftpHost login password file.xml FTP_FOLDER

如您所見,此腳本復制文件具有特定名稱。

如何更改此腳本以查找以某個字符串開頭的第一個 XML 文件。 因此,而不是file.xml我想通過beginning_of_the_string (不.xml )。 那么腳本應該復制這些文件中的第一個嗎?

Windows ftp.exe本身不支持通配符。 但是,如果您在mget命令中使用通配符,它​​將未經修改地將其傳遞給服務器。 如果服務器支持通配符(這是一種非標准但常見的行為),它將允許ftp.exe僅下載匹配的文件。 另請參閱帶有通配符的 FTP 目錄部分列表

mget beginning_of_the_string*.xml

如果您的 FTP 服務器不支持通配符,您可以分兩個階段運行ftp.exe 首先列出遠程目錄。 然后在本地處理列表以查找具有給定前綴的文件。 然后再次運行ftp.exe下載文件。 檢查@Hackoo 的答案以獲取此類實現的示例。


或者使用其他支持本地通配符匹配的 FTP 客戶端。

例如,使用WinSCP,您可以執行以下操作:

@echo off
cd /d %0\.. 
set cmd=%CD%

echo open ftp://%~2:%~3@%1 > %cmd%\ftpcmd.dat
IF NOT "%5" == "" echo cd %~5 >> %cmd%\ftpcmd.dat
echo get %~4 %cmd%\ >> %cmd%\ftpcmd.dat
echo exit >> %cmd%\ftpcmd.dat
%cmd%\winscp.com /script=%cmd%\ftpcmd.dat
del %cmd%\ftpcmd.dat

你這樣稱呼它:

c:\download.bat ftpHost login password beginning_of_the_string*.xml FTP_FOLDER

而不是beginning_of_the_string*.xml ,使用WinSCP 支持的任何其他文件掩碼/通配符

有關詳細信息,請參閱WinSCP 腳本編寫指南。

(我是 WinSCP 的作者)

正如Martin Prikryl所說:

您可以分兩個階段運行 ftp.exe。 首先列出遠程目錄。 然后在本地處理列表以查找具有給定前綴的文件。 然后再次運行 ftp.exe 下載文件。

所以你可以試試這個可以從公共FTP 服務器下載的批處理文件:ftp.microsoft.com以該字符串ws開頭的所有ws*.doc文件作為示例:

@echo off
mode con cols=85 lines=22 & Color A
::***********************************
Set FTPSERVER=ftp.microsoft.com
Title List files and folders on an FTP server (%FTPSERVER%) by Hackoo
Set USER=anonymous
Set Password=anonymous@anonymous.com
Set DossierFTP=/bussys/winsock/winsock2/
Set DownloadFolder=winsock2
Set BeginString=ws
Set ExtensionType=doc
::*******************************************************
Goto List
:List
> ft.do echo Open %FTPSERVER%
>> ft.do echo %USER%
>> ft.do echo %Password%
>> ft.do echo prompt n
>> ft.do echo bin
>> ft.do echo cd %DossierFTP%
>> ft.do echo ls -R TLIST.txt
>> ft.do echo bye
ftp -s:ft.do
del ft.do
CLS
Color 9B
echo Click to Download the files list
pause
Goto Download
::*********************************************************
:Download
Cls
> ft.do echo Open %FTPSERVER%
>> ft.do echo %USER%
>> ft.do echo %Password%
>> ft.do echo prompt n
>> ft.do echo bin
>> ft.do echo cd %DossierFTP%
findstr /r /i "%ExtensionType%" TLIST.txt > %ExtensionType%Files.txt
findstr /r /i "^%BeginString%" %ExtensionType%Files.txt > %ExtensionType%.txt
for /F %%f in (%ExtensionType%.txt) do ( >> ft.do echo get %%f) 
>> ft.do echo bye
ftp -s:ft.do
del ft.do
CLS
Color 9A
echo Moving downloaded files to %DownloadFolder% Folder
pause
Goto MoveFiles
::*********************************************************
:MoveFiles
cls
echo Moving downloaded files to %DownloadFolder% Folder
Set Source=%~dp0
Set Destination=%Source%%DownloadFolder%
if not exist %DownloadFolder% MD %DownloadFolder%
for /F %%f in (%ExtensionType%.txt) do (move "%Source%%%f" "%Destination%")
pause

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM