2012-01-24 8 views
0

最初にリモートサーバーからローカルディレクトリにFTPする単一のdosスクリプトを作成し、これらのファイルをローカルマシン内の別のフォルダにコピーする必要があります。 2番目の手順の背後にある理由は、宛先フォルダーのパスが、32ビットまたは64ビットのシステムプロセッサーかどうかに基づいているためです。DOSスクリプトtpリモートサーバーからFTPをローカルフォルダにコピーする

私は現在、正常に動作している2つの別々のスクリプトを持っています。しかし、それらを1つのスクリプトにまとめると、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プロンプトでのループでプログラムを呼び出しているので、私のプログラムの2番目の部分を行っている間にブレークするようだ - ここで私が使用しているスクリプトです。したがって、dosコマンドのどれもFTPプロンプトで翻訳されません。

これを単一のスクリプトで実現する方法については、非常に感謝しています。

おかげで、 サンダース

答えて

1

FTPコマンドは、私の知る限り、外部ファイルからのftpコマンドを読まずに、コマンドラインからコマンドを処理することができません。私は通常wgetのWindows版をダウンロードし、それは私たちのためにうまくいきます。おそらくあなたはそれを見てみたいと思います。ここで

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

ためのwget http://www.editcorp.com/Personal/Lars_Appel/wget/v1/wget_7.html

のためのマニュアルは、あなたがにジャンプするスクリプトを教えてftpコマンドを起動した後である ':EOF'。バッチファイル内でジャンプするには: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 
関連する問題