我需要将位于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>内部不起作用。
非常感谢任何帮助。感谢。
答案 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作为占位符,请忽略该更改并像以前一样使用>>
。
如果某一天有多个文件夹,我相信这个脚本将使用扩展通配符时最后出现的文件。但是,我没有对此进行测试。