2

FTP サーバーにファイルを生成するプログラムがありますが、完了するまでに 3 ~ 5 分かかる場合があり、プログラムによって作成されるファイルの名前も知っていました。サーバーでプログラムを開始すると、ファイルが作成されるまでチェックし続けます。ファイルが作成されたら、以下のバッチ スクリプトを使用してファイルをローカル デスクトップに ftp します。

@ftp -i -s:"%~f0"&GOTO:EOF
open 10.100.16.111 
username
password
lcd c:\
cd  root/output_folder
binary
mget "*partial_file_name*" REM mget using wildcard search
disconnect
bye

このスクリプトは私にとってはうまくいきます。しかし、問題は、このスクリプトをそのまま変更する必要があることです。スクリプトは、ファイルが生成されるまで実行し続ける必要があります。ファイルの作成がいつ完了するかわからないためです。そのため、ファイルの作成が完了するまで待機し、同じファイルを FTP 経由でダウンロードするループ スクリプトを作成するために、誰かが私を助けてくれたり、ガイドしてくれたりするのは素晴らしいことです。

4

2 に答える 2

2

この編集により、次のように、コマンド ラインでファイル名を使用してバッチ ファイルを起動できます。

ftpscript.bat "filename.ext"

それ以降のバージョンの Windows では制限された場所であるlcdを使用することに注意してください。c:\

@echo off
 >file.tmp echo open 10.100.16.111 
>>file.tmp echo username
>>file.tmp echo password
>>file.tmp echo lcd c:\
>>file.tmp echo cd  root/output_folder
>>file.tmp echo binary
>>file.tmp echo mget "%~1"
>>file.tmp echo disconnect
>>file.tmp echo bye

:retry
ftp -i -s:"file.tmp"
if not exist "%~1" timeout /t 300 & goto :retry
echo file has downloaded
del file.tmp
pause
于 2013-08-22T06:27:25.227 に答える
0

より洗練された解決策は、一時スクリプト ファイルの作成を回避するために、パラメータ化されたスクリプトまたはコマンド ラインのコマンド (WinSCP など) をサポートする FTP クライアントを使用することです。

パラメータ化されたスクリプト

バッチ ファイルは、Windows の場合とほぼ同じですftp

@echo off
:retry
winscp.com /script=script.txt /parameter "%~1"
if not exist "%~1" timeout /t 300 & goto :retry
echo file has downloaded
pause

スクリプトは次のftpWinSCP スクリプトに変換されます

open ftp://username:password@10.100.16.111/
lcd c:\
cd root/output_folder
get -transfer=binary "%1%"
exit

コマンドラインのコマンド

コマンドをバッチ ファイルにインライン化することもできます。

@echo off
:retry
winscp.com /command ^
    "open ftp://username:password@10.100.16.111/" ^
    "lcd c:\" ^
    "cd root/output_folder" ^
    "get -transfer=binary ""%~1""" ^
    "exit"
if not exist "%~1" timeout /t 300 & goto :retry
echo file has downloaded
pause

参考文献:

FTPS または SFTP にアップグレードする必要があった場合は、コマンドコマンドのセッション URLを適宜変更してください。open

(私は WinSCP の作者です)

于 2014-11-19T10:49:55.617 に答える