2012-01-24 118 views
0

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

我有两个单独的脚本,现在工作正常。但是,当我将它们放在一个脚本中时,它会因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提示循环程序造成中断。所以,在FTP提示符下没有任何dos命令被转换。

有关如何在单个脚本中实现此操作的任何帮助,请致以高度赞赏。

感谢, 桑德斯

回答

1

的FTP命令AFAIK不能处理来自命令行的命令,而不从外部文件中读取的FTP命令。我通常会下载一个wget的windows版本,它对我们来说很好,或许你想看看这个。

这里是wget的http://www.editcorp.com/Personal/Lars_Appel/wget/v1/wget_7.html

手册例如

wget ftp://<user>:<password>@server.com/upload/file.ext 
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 
相关问题