DOS脚本从远程服务器FTP到FTP并将文件复制到本地文件夹

时间:2012-01-24 17:14:54

标签: ftp copy dos

我需要编写一个dos脚本,它首先从远程服务器FTP到我的本地目录,然后将这些文件复制到本地机器中的另一个文件夹。第二步背后的原因是目标文件夹路径是基于32位还是64位的SYSTEM处理器。

我有两个单独的脚本,现在工作正常。但是当我将它们放在一个脚本中时,它会在ftp命令提示符下失败。这是我正在使用的脚本 -

@echo off
:MAIN

SETLOCAL ENABLEDELAYEDEXPANSION


set winver=%PROCESSOR_ARCHITECTURE%

rmdir c:\batch\temp

mkdir c:\batch\temp

goto :ftpbegin

:ftpbegin

@ftp -i -s:"%~f0"&GOTO:EOF
open x.y.z.a
<userid>
<password>
!:-----FTP commands here -----
lcd C:\batch\temp
cd CGServices\Uploads
binary
mget "*.psl"
mget "*.PST"
mget "*.psy"
get abc.ini
get def.pmd
disconnect
bye

:eof

exit /b


:findwin

if %winver% ==x86 (goto :copywin32) else (goto :copywin64)


:copywin32

echo "inside copywin32"

<do the copy files here>

:copywin64
<do copy files here>

exit /b 0

但是,ftp脚本在执行程序的第二部分时似乎会导致中断,因为它在ftp提示符中循环调用程序。因此,没有任何dos命令在FTP提示符上被翻译。

有关如何在单个脚本中实现此目的的任何帮助都非常感谢。

感谢, 桑德斯

2 个答案:

答案 0 :(得分:1)

FTP命令AFAIK无法从外部文件读取ftp命令而无法从命令行处理命令。我经常下载一个Windows版本的wget,它对我们很有用,也许你想看一下。

以下是wget http://www.editcorp.com/Personal/Lars_Appel/wget/v1/wget_7.html

的手册

例如

wget ftp://<user>:<password>@server.com/upload/file.ext

答案 1 :(得分:0)

调用ftp命令后,告诉脚本跳转到':EOF'。您无法使用:EOF标签跳转到批处理文件中。 Goto :EOF基本上意味着“跳转到文件的末尾”,这通常与调用exit /b相同。您也可以从子程序中调用goto :EOF。在这种情况下,它意味着“这是子程序的结束”。有关详细信息,请参阅goto /?call /?

因为在ftp.exe中你使用.bat文件作为ftp命令脚本,open x.y.z.a之前的所有行都会给你invalid command个消息,所以最好尽量减少FTP命令块之前的行。

您的脚本应如下所示:

@echo off
goto main

:ftpbegin
@ftp -i -s:"%~f0" & goto ftpend
open x.y.z.a
<userid>
<password>
!:-----FTP commands here -----
lcd C:\batch\temp
cd CGServices\Uploads
binary
mget "*.psl"
mget "*.PST"
mget "*.psy"
get abc.ini
get def.pmd
disconnect
bye

:main
SETLOCAL ENABLEDELAYEDEXPANSION
set winver=%PROCESSOR_ARCHITECTURE%
rmdir c:\batch\temp
mkdir c:\batch\temp
goto ftpbegin

:ftpend
if not "%winver%"=="x86" goto copywin64

REM did not jump, so this is a 32-bit system
echo "inside copywin32"
<do copy files here>
goto finish

:copywin64
echo "inside copywin64"
<do copy files here>

:finish
endlocal