2012-01-24 5 views
0

먼저 원격 서버에서 로컬 디렉토리로 FTP를 보내고이 파일을 로컬 시스템의 다른 폴더에 복사합니다. . 두 번째 단계의 이유는 대상 폴더 경로가 32 비트 또는 64 비트 시스템 프로세서인지 여부에 따라 달라지기 때문입니다.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 프롬프트에서 루프에서 프로그램을 호출하기 때문에 내 프로그램의 두 번째 부분을 실행하는 동안 휴식을 일으킬 것으로 보인다 - 여기 내가 사용하고있는 스크립트입니다. 따라서 dos 명령은 FTP 프롬프트에서 변환되지 않습니다.

이 작업을 단일 스크립트에서 수행하는 방법에 대한 도움을 주시면 매우 감사하겠습니다.

덕분에, 샌더스

답변

1

ftp 명령이 AFAIK 외부 파일에서 FTP 명령을 읽지 않고 명령 줄에서 명령을 처리 할 수 ​​없습니다. 나는 보통 wget의 Windows 버전을 다운로드하고, 그것은 우리를 위해 잘 작동한다. 아마도 당신은 그것을보고 싶을 것이다. 'EOF'여기

ftp 명령은 이동하려면 스크립트를 말해 호출 한 후 예를

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

에 대한 wget을 http://www.editcorp.com/Personal/Lars_Appel/wget/v1/wget_7.html

에 대한 매뉴얼입니다. 배치 파일 내에서 점프하기 위해 :EOF 라벨을 사용할 수 없습니다. Goto :EOF은 기본적으로 "파일 끝으로 건너 뛰기"를 의미합니다. 이는 일반적으로 exit /b을 호출하는 것과 같습니다. 서브 루틴 내부에서 goto :EOF으로 호출 할 수도 있습니다. 이 경우 "이것은 서브 루틴의 끝"입니다. 더 많은 정보 Ftp.exe가 당신이 당신에게 invalid command 메시지를 줄 것이다 open x.y.z.a하기 전에 ftp 명령 스크립트로 모든 라인을 당신의 .bat 파일을 사용하고 있기 때문에 goto /?call /?

를 참조하십시오 그래서 수를 최소화하는 것이 좋은 것 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 
관련 문제