批处理文件,用于下载名称以FTP中给定字符串开头的文件

时间:2015-04-17 13:25:30

标签: batch-file 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。然后脚本应该复制这些文件中的第一个?

2 个答案:

答案 0 :(得分:1)

Windows ftp.exe本身不支持通配符。虽然如果在mget命令中使用通配符,它​​会将其未经修改地传递给服务器。如果服务器支持通配符(什么是非标准但常见的行为),则允许ftp.exe仅下载匹配的文件。另请参阅FTP directory partial listing with wildcards

mget beginning_of_the_string*.xml

如果您的FTP服务器不支持wilcards,您可以分两个阶段运行ftp.exe。首先列出远程目录。然后,您在本地处理列表以查找具有给定前缀的文件。然后再次运行ftp.exe以下载文件。请查看@Hackoo的答案,了解此类实施的示例。


或者使用另一个支持本地通配符匹配的FTP客户端。

E.g。使用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,请使用任何其他file mask/wildcard that WinSCP supports

有关详情,请参阅WinSCP scripting指南。

(我是WinSCP的作者)

答案 1 :(得分:1)

正如 Martin Prikryl 所说:

  

您可以分两个阶段运行ftp.exe。首先列出遥控器   目录。然后,您在本地处理列表以查找给定的文件   字首。然后再次运行ftp.exe以下载文件。

所以你可以试试这个可以从公共 FTP服务器上下载的批处理: ftp.microsoft.com 所有 ws * .doc 以此字符串 ws 开头的文件作为示例:

@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