通过FTP从服务器下载文件

时间:2014-07-04 10:30:39

标签: windows batch-file ftp cmd remote-access

我需要将位于server1中名为abc_20140221_123456的文件夹中的文件通过ftp下载到我的本地目录。问题是文件夹名称的最后六个字符不固定。例如,今天该文件夹可能被称为abc_20140221_123456,明天它可能被称为abc_20140221_234567。我在编写自动化批处理脚本时遇到了问题。

这是我正在处理的脚本:

@echo off
setlocal
set buildDate=%DATE:~0,10%
set dateStr=%buildDate:~6,4%%buildDate:~3,2%%buildDate:~0,2%
set folderName=abc_%dateStr%_
echo open server1>>file.tmp 
echo username>>file.tmp
echo password>>file.tmp
echo prompt>> file.tmp
echo binary>>file.tmp
echo lcd E:\>>file.tmp
:: Not sure how to cd to abc_20140221_* from here
echo get filename.txt>>file.tmp
echo y>>file.tmp
echo disconnect>>file.tmp
echo bye>>file.tmp
ftp -i -s:file.tmp
pause

我知道我可以像这样循环使用目录:

for /d %%d in (' %path%/*%folderName%* ') do (
echo get filename.txt>>file.tmp
echo y>>file.tmp
)

但是“for”在ftp>内部不起作用。

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

我假设在给定日期只有一个abc_YYYYMMDD_nnnnnn目录。

@echo off
setlocal
set buildDate=%DATE:~0,10%
set dateStr=%buildDate:~6,4%%buildDate:~3,2%%buildDate:~0,2%
set folderName=abc_%dateStr%_
set root=E:
echo open server1>file.tmp 
echo username>>file.tmp
echo password>>file.tmp
echo prompt>> file.tmp
echo binary>>file.tmp
for /D %%D in (%root%\%foldername%??????) do set target=%%D
echo lcd %target%>>file.tmp
echo get filename.txt>>file.tmp
echo y>>file.tmp
echo disconnect>>file.tmp
echo bye>>file.tmp
ftp -i -s:file.tmp
pause

我根据您的原始脚本将root设置为E:\ - 您可以将其更改为实际的父目录。我也改变了

echo open server1>>file.tmp

echo open server1>file.tmp

因此它会创建一个新的临时文件。否则,每次脚本运行时它都会继续附加到file.tmp。如果这是您想要的,或者您每次都在生成一个唯一的脚本文件名,而只是使用file.tmp作为占位符,请忽略该更改并像以前一样使用>>

如果某一天有多个文件夹,我相信这个脚本将使用扩展通配符时最后出现的文件。但是,我没有对此进行测试。