полдня сидел, но задачу "History to ftp" всё-таки решил!
Причём (на мой взгляд) довольно красиво: скрипт рекурсивно обходит всё дерево начиная с заданной папки, если в дереве есть папка "History" - она копируется вместе со всеми вложенными папками и файлами на сервер с соблюдением структуры и относительного пути. Ветки, не содержащие папки "History", игнорируются.
Код: @echo off
chcp 1251
set FTPSERVER=somthere.in.the.net
set FTPUSER=ftpusername
set FTPPASSWORD=ftpuserpassword
set "FTPFOLDER=/incoming/дальше идёт моя папка"
set "LOCALFOLDER=c:\Program Files\QIP\Users\"
1>"%~dp0ftpscript.tmp" (
echo open %FTPSERVER%
echo %FTPUSER%
echo %FTPPASSWORD%
echo binary
echo literal pasv
)
for /f "delims=" %%D in ('dir /a:d /b "%LOCALFOLDER%*"') do call :FLDCHK "%%~dpnxD" "/%%~nxD"
1>>"%~dp0ftpscript.tmp" echo by
ftp -s:"%~dp0ftpscript.tmp"
del "%~dp0ftpscript.tmp"
goto :EOF
:FLDCPY
1>>"%~dp0ftpscript.tmp" (
echo mkdir "%FTPFOLDER%%~2"
echo cd "%FTPFOLDER%%~2"
echo lcd "%~dpnx1"
)
for /f "delims=" %%A in ('dir /B /A:-D "%~1"') do 1>>"%~dp0ftpscript.tmp" (
echo put "%%~nxA"
)
for /f "delims=" %%B in ('dir /B /A:D "%~1"') do call :FLDCPY "%~1\%%~nxB" "%~2/%%~nxB"
goto :EOF
:FLDCHK
pushd "%~1"
for /f "delims=" %%E in ('dir /a:d /b *') do (
if "%%~nxE" == "History" (call :FLDCPY "%%~dpnxE" "%~2/%%~nxE") else (call :FLDCHK "%%~dpnxE" "%~2/%%~nxE")
)
popd
goto :EOF