批处理文件下载一个文件,名称从FTP
问题描述:
一个给定的字符串开始
我用下面的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
)。那么脚本应该复制这些文件的第一个?
答
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的作者)
答
由于马丁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