2015-04-17 126 views
2
一个给定的字符串开始

我用下面的bat文件:批处理文件下载一个文件,名称从FTP

::@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)。那么脚本应该复制这些文件的第一个?

回答

1

Windows ftp.exe不支持通配符。


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


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

E.g.与WinSCP你可以这样做:

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

echo open ftp://%~2:%[email protected]%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

由于马丁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 [email protected] 
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