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

DOS脚本从远程服务器FTP并将文件复制到本地文件夹,ftp,copy,dos,Ftp,Copy,Dos,我需要编写一个dos脚本,它将首先从远程服务器FTP到本地目录,然后将这些文件复制到本地计算机中的另一个文件夹。第二步背后的原因是目标文件夹路径基于系统处理器是32位还是64位 我有两个独立的脚本,现在运行良好。但是,当我将它们放在一个脚本中时,ftp命令提示失败了。这是我正在使用的脚本- @echo off :MAIN SETLOCAL ENABLEDELAYEDEXPANSION set winver=%PROCESSOR_ARCHITECTURE% rmdir c:\batch\t

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

我有两个独立的脚本,现在运行良好。但是,当我将它们放在一个脚本中时,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
@echo关闭
:MAIN
SETLOCAL ENABLEDELAYEDEXPANSION
设置winver=%PROCESSOR\u架构%
rmdir c:\batch\temp
mkdir c:\batch\temp
转到:ftpbegin
:ftpbegin
@ftp-i-s:“%~f0”&转到:EOF
开放式x.y.z.a
!:-----这里有FTP命令-----
lcd C:\batch\temp
cd CGServices\上传
二元的
mget“*.psl”
mget“*.PST”
mget“*.psy”
获取abc.ini
获取def.pmd
断开
再见
:eof
退出/b
:芬德温
如果%winver%==x86(转到:copywin32)或其他(转到:copywin64)
:copywin32
回显“内部copywin32”
:copywin64
退出/b0
但是,ftp脚本似乎在执行程序的第二部分时导致中断,因为它在ftp提示符中以循环方式调用程序。因此,没有一个dos命令在FTP提示符下被翻译

任何关于如何在一个脚本中实现这一点的帮助都是非常感谢的

谢谢,
Sanders

FTP命令AFAIK无法在不从外部文件读取FTP命令的情况下处理命令行中的命令。我通常会下载一个windows版本的wget,它对我们来说很好用,也许你想看看

这是wget的手册

比如说

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

调用
ftp
命令后,您会告诉脚本跳转到“:EOF”。不能使用
:EOF
标签在批处理文件中跳转
Goto:EOF
基本上是指“跳转到文件末尾”,这通常与调用
exit/b
相同。您还可以从子例程内部调用
goto:EOF
。在这种情况下,它的意思是“这是子程序的结束”。有关更多信息,请参见
goto/?
call/?

因为在ftp.exe中,您使用.bat文件作为ftp命令脚本,所以
open x.y.z.a
之前的所有行将向您发送
无效命令
消息,因此最好尽量减少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
@echo关闭
后藤大街
:ftpbegin
@ftp-i-s:“%~f0”&转到ftpend
开放式x.y.z.a
!:-----这里有FTP命令-----
lcd C:\batch\temp
cd CGServices\上传
二元的
mget“*.psl”
mget“*.PST”
mget“*.psy”
获取abc.ini
获取def.pmd
断开
再见
:main
SETLOCAL ENABLEDELAYEDEXPANSION
设置winver=%PROCESSOR\u架构%
rmdir c:\batch\temp
mkdir c:\batch\temp
转到ftpbegin
:ftpend
如果不是“%winver%”==“x86”转到copywin64
REM没有跳转,所以这是一个32位系统
回显“内部copywin32”
转到终点
:copywin64
回显“内部copywin64”
:完成
端部