由於用戶Martin Prikryl在comment指出的那樣,是可以使用Windows的本地FTP命令ftp.exe
來實現自己的目標,雖然它可能不那麼容易。所以我不得不接受挑戰...
這是一個腳本,下載給定數量的最新(最新)文件。這可以修改爲考慮時間戳而不是計數,但由於日期/時間格式可能取決於FTP主機和/或本地機器,並且我不知道在執行FTP命令dir
時接收的格式是什麼,我決定先去伯爵。所以這裏是:
@echo off
setlocal EnableExtensions DisableDelayedexpansion
rem // Define constants here:
set "_FTP_LIST=%TEMP%\ftp_list_%RANDOM%.txt" & rem // (FTP script for listing files)
set "_FTP_RECV=%TEMP%\ftp_recv_%RANDOM%.txt" & rem // (FTP script for getting files)
set "_FTP_LTMP=%TEMP%\ftp_list_%RANDOM%.tmp" & rem // (file to store remote file list)
set "_FTP_HOST=<host name>" & rem // (name of FTP host)
set "_FTP_USER=<username>" & rem // (user name to login to the FTP host)
set "_FTP_PASS=<password>" & rem // (pass word to login to the FTP host)
set "_FTP_RSRC=<source path>" & rem // (path to remote source location)
set "_FTP_LDST=<destination path>" & rem // (path to local destination location)
set "_REVERSE=" & rem // (set to any value to get the oldest not the newest files)
set /A "_COUNT=1" & rem // (number of most recent or newest remote files to receive)
rem // Check if revert flag is set, force sort order to be in decreasing age in case:
if defined _REVERSE (set "REV=r") else (set "REV=")
rem // Build FTP script for listing remote files sorted by age:
> "%_FTP_LIST%" (
rem // Check whether use name is given:
if defined _FTP_USER (
rem // Avoid auto-login:
set "SWITCH=-n"
rem // Write command to login:
setlocal EnableDelayedExpansion
echo user "!_FTP_USER!" !_FTP_PASS!
endlocal
) else (
rem // Attempt to login anonymously:
set "SWITCH=-A"
)
rem // Write command to change to the desired remote location:
echo cd "%_FTP_RSRC%"
rem // Write command to list remote files sorted by increasing age:
echo ls -t%REV% "%_FTP_LTMP%"
rem // Write command to leave the FTP host:
echo bye
)
rem /* Execute FTP script to list remote files sorted by age and write result to a
rem temporary file, which is going to be read and parsed later: */
ftp -i -v %SWITCH% -s:"%_FTP_LIST%" "%_FTP_HOST%"
rem // Build FTP script for downloading the newest remote files:
> "%_FTP_RECV%" (
rem // Check whether use name is given:
if defined _FTP_USER (
rem // Write command to login:
setlocal EnableDelayedExpansion
echo user "!_FTP_USER!" !_FTP_PASS!
endlocal
)
rem // Write command to change to the desired remote location:
echo cd "%_FTP_RSRC%"
rem // Write command to change to the desired local location:
echo lcd "%_FTP_LDST%"
rem // Reset index used to extract the listed remote files:
set /A "INDEX=0"
rem /* Read the temporary file containing the list of remote files sorted by age,
rem loop through them and dynamically build the download commands: */
for /F usebackq^ delims^=^ eol^= %%L in ("%_FTP_LTMP%") do (
rem // Increment index:
for /F %%K in ('set /A "INDEX+1"') do (
set /A "INDEX=%%K"
rem /* Check whether index already reached given count of remote files and
rem if not, write command to download a single file: */
if %%K LEQ %_COUNT% echo get "%%L"
)
)
rem // Write command to leave the FTP host:
echo bye
)
rem // Ensure that the local destination directory exists:
md "%_FTP_LDST%" 2> nul
rem // Execute FTP script to download the newest remote files:
ftp -i -v %SWITCH% -s:"%_FTP_RECV%" "%_FTP_HOST%"
rem // Clean up temporary files:
del "%_FTP_LIST%" "%_FTP_RECV%" "%_FTP_LTMP%"
endlocal
exit /B
我不認爲這是可能的與Windows的''ftp'工具... – aschipfl
是的,如果時間戳是文件名的一部分,這可能是可能的,但我不知道用ftp獲取最後修改日期的方法。 – SomethingDark
你是什麼意思*»只傳輸新文件«*?你想複製一定的最大年齡的文件,或者你需要一定數量的最新文件嗎?後者可以很容易地使用'ftp.exe'實現... – aschipfl