| @echo off |
| |
| |
| echo ***************** 开始从 UNIX 服务器下载文件夹 ************************** |
| set rp=/pub/mirrors/ubuntu/pool/main/l/language-pack-zh/ |
| call :FTPXGet ftp.cs.stanford.edu anonymous Spring %rp% .\zh |
| pause |
| |
| echo ***************** 开始从 WINDOWS 服务器下载文件夹 *********************** |
| set rp=/Products/Windows/Windows95/CDRomExtras/AdministrationTools/ |
| call :FTPXGet ftp.microsoft.com anonymous Brother %rp% D:\ms |
| pause |
| echo ***************** 开始上传文件夹到远程 FTP 服务器 *********************** |
| call :FTPXPut 10.120.6.43 was1 admin "%userprofile%\Favorites" /MyFavoriteSites |
| pause |
| goto :EOF |
| |
| |
| |
| REM 上传一个本地文件夹到 FTP 服务器 |
| |
| |
| |
| |
| |
| :FTPXPut |
| if [%5]==[] ( |
| echo ERROR : 参数不足,已退出。 |
| goto :EOF |
| ) |
| setlocal enabledelayedexpansion |
| |
| set $__ftpq="%temp%\CommandQueue%random%.txt" |
| |
| set $__ldir=%~f4\ |
| set $__ldir=!$__ldir:\\=\! |
| |
| set $__rdir=/%5/ |
| set $__rdir=!$__rdir:\=/! |
| set $__rdir=!$__rdir:"=! |
| set $__rdir=!$__rdir://=/! |
| |
| echo 本地目录:!$__ldir! |
| echo 远程目录:!$__rdir! |
| echo 初始化... |
| if not exist "!$__ldir!" ( |
| echo ERROR : 找不到文件夹 "!$__ldir!",已退出。 |
| goto :EOF |
| ) |
| |
| set /a LEN_SKIP=0 |
| for /l %%i in (0,1,1000) do ( |
| if not "!$__ldir:~%%i,1!"=="" ( |
| set /a LEN_SKIP+=1 |
| ) |
| ) |
| |
| (echo open %1 |
| echo %2 |
| echo %3 |
| echo binary)>!$__ftpq! |
| echo 正在映射文件夹并添加FTP传输队列... |
| |
| for /f "delims=" %%a in ('echo !$__ldir!^&dir /s /b /ad "!$__ldir!"') do ( |
| |
| set "$__lcp=%%a\" |
| set "$__lcp=!$__lcp:\\=\!" |
| |
| set "$__lcrp=!$__lcp:~%LEN_SKIP%!" |
| |
| if not "!$__lcrp!"=="" set "$__lcrp=!$__lcrp:\=/!" |
| echo !$__lcp! --^> !$__rdir!!$__lcrp! |
| |
| |
| echo mkdir "!$__rdir!!$__lcrp!">>!$__ftpq! |
| echo cd "!$__rdir!!$__lcrp!">>!$__ftpq! |
| |
| |
| for /f "delims=" %%z in ('dir /b /a-d "!$__lcp!" 2^>nul') do ( |
| |
| echo put "!$__lcp!%%z">>!$__ftpq! |
| |
| ) |
| ) |
| |
| echo bye>>!$__ftpq! |
| |
| echo 启动FTP文件传输队列... |
| ftp -v -s:!$__ftpq! |
| echo 文件传输完成。 |
| |
| echo 正在清除临时文件... |
| del !$__ftpq! |
| echo 操作完成。 |
| endlocal |
| goto :EOF |
| |
| |
| REM 下载一个 FTP 文件夹到本地 |
| |
| |
| |
| |
| |
| |
| :FTPXGet |
| set $ftpp="%temp%\FTP_Paths.txt" |
| set $ftpq="%temp%\CommandQueue.txt" |
| if [%1]==[] (set /p $srv=FTP站点: ) else (set $srv=%1) |
| if [%2]==[] (set /p $user=用户名: ) else (set $user=%2) |
| if [%3]==[] (set /p $pwd=密码: ) else (set $pwd=%3) |
| if [%4]==[] (set /p $rdir=远程目录:) else (set $rdir=%4) |
| if [%5]==[] (set /p $ldir=本地目录:) else (set $ldir="%~f5") |
| echo 远程路径:%$rdir% |
| echo 本地路径:%$ldir:"=% |
| call :GenerateFTPGetCommand %$srv% %$user% %$pwd% %$rdir% %$ldir% %$ftpp% %$ftpq% |
| echo 启动FTP文件传输队列... |
| ftp -v -s:%$ftpq% |
| echo 文件传输完成。 |
| del %$ftpp%,%$ftpq% |
| goto :EOF |
| |
| |
| |
| :GenerateFTPGetCommand |
| if [%7]==[] ( |
| echo ERROR : 参数不足,已退出。 |
| goto :EOF |
| ) |
| echo 初始化... |
| set $_srv=%1 |
| set $_user=%2 |
| set $_pwd=%3 |
| |
| if exist "%temp%\*.$ftp_cmd" del /q "%temp%\*.$ftp_cmd" |
| if exist "%temp%\*.$dir_rst" del /q "%temp%\*.$dir_rst" |
| if exist "%temp%\*.$dir_gen" del /q "%temp%\*.$dir_gen" |
| if exist %6 del /f /q %6 |
| |
| |
| echo 正在分析服务器类型... |
| (echo open %$_srv% |
| echo %$_user% |
| echo %$_pwd% |
| echo prompt |
| echo verbose |
| echo binary |
| echo dir / "%temp%\$roo$.$dir_rst" |
| echo bye)>"%temp%\ftpcmd.$ftp_cmd" |
| ftp -s:"%temp%\ftpcmd.$ftp_cmd">nul |
| |
| |
| findstr "^[0-9]" "%temp%\$roo$.$dir_rst" 1>nul 2>&1 |
| set $_typeUnixOrMSDOS=%errorlevel% |
| set /p $=目录列表样式:<nul |
| if %$_typeUnixOrMSDOS% equ 0 (echo MS-DOS) else (echo Unix) |
| |
| echo 正在映射文件夹并添加FTP传输队列... |
| (echo open %$_srv% |
| echo %$_user% |
| echo %$_pwd% |
| echo binary)>%7 |
| |
| set "BASE_FOLDER=" |
| set "LEN_SKIP=" |
| |
| call :GenerateUnixFTPGetCommandCore %$_typeUnixOrMSDOS% %$_srv% %$_user% %$_pwd% %4 %5 %6 %7 |
| |
| echo bye>>%7 |
| |
| echo 正在清除临时文件... |
| del /q %temp%\*.$ftp_cmd,%temp%\*.$dir_rst,%temp%\*.$dir_gen |
| goto :EOF |
| |
| |
| |
| |
| |
| :GenerateUnixFTPGetCommandCore |
| setlocal enabledelayedexpansion |
| if [%8]==[] ( |
| echo ERROR : 参数不足,已退出。 |
| goto :EOF |
| ) |
| set $__srv=%2 |
| set $__user=%3 |
| set $__pwd=%4 |
| |
| set $__rcp=%5/ |
| set $__rcp=!$__rcp:\=/! |
| set $__rcp=!$__rcp:"=! |
| set $__rcp=!$__rcp://=/! |
| |
| set $__cl=!$__rcp:/=$! |
| |
| set $__rst=%7 |
| |
| set $__cq=%8 |
| |
| if "!BASE_FOLDER!"=="" set BASE_FOLDER=!$__rcp! |
| |
| if "!LEN_SKIP!"=="" ( |
| set /a LEN_SKIP=0 |
| for /l %%i in (0,1,1000) do ( |
| if not "!BASE_FOLDER:~%%i,1!"=="" ( |
| set /a LEN_SKIP+=1 |
| ) |
| ) |
| ) |
| |
| set $__lcp=%6\!$__rcp:~%LEN_SKIP%! |
| set $__lcp=!$__lcp:/=\! |
| set $__lcp=!$__lcp:"=! |
| set $__lcp=!$__lcp:\\=\! |
| |
| echo !$__rcp! --^> !$__lcp! |
| echo !$__rcp!>>!$__rst! |
| |
| if not exist "!$__lcp!" md "!$__lcp!">>!$__cq! |
| echo lcd "!$__lcp:~0,-1!">>!$__cq! |
| |
| |
| (echo open !$__srv! |
| echo !$__user! |
| echo !$__pwd! |
| echo prompt |
| echo verbose |
| echo binary |
| |
| if %1 equ 0 echo quote site dirstyle |
| echo dir "!$__rcp!" "%temp%\!$__cl!.$dir_rst" |
| echo bye)>"%temp%\ftpcmd.$ftp_cmd" |
| ftp -s:"%temp%\ftpcmd.$ftp_cmd" 1>nul |
| |
| for /f "tokens=1,2,3,4,5,6,7,8,* delims= " %%a in ('type "%temp%\!$__cl!.$dir_rst"^|findstr "^^[^^d]"') do ( |
| |
| if not "%%i"=="" echo get "!$__rcp!%%i">>!$__cq! |
| |
| ) |
| |
| type "%temp%\!$__cl!.$dir_rst"|findstr "^d" 1>nul |
| if !errorlevel!==0 ( |
| |
| for /f "tokens=1,2,3,4,5,6,7,8,* delims= " %%a in ('type "%temp%\!$__cl!.$dir_rst"^|findstr "^^d"') do ( |
| |
| if not "%%i"=="" if not "%%i"=="." if not "%%i"==".." echo !$__rcp!/%%i>>"%temp%\!$__cl!.$dir_gen" |
| ) |
| |
| if exist "%temp%\!$__cl!.$dir_gen" for /f "usebackq delims=" %%a in ("%temp%\!$__cl!.$dir_gen") do ( |
| call :GenerateUnixFTPGetCommandCore %1 !$__srv! !$__user! !$__pwd! "%%a" %6 !$__rst! !$__cq! |
| ) |
| ) |
| endlocal |
| goto :EOFCOPY |