2012-01-24 230 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 
相關問題