web-dev-qa-db-ja.com

バッチスクリプトを使用してFTPサーバーにファイルをアップロードするにはどうすればよいですか?

以下のコードを含むFTP_automation.batというバッチファイルを作成しました。

SET MyPath=E\PGP\test_pg
ftp
open 142.245.30.165 21
TESTA9MS
test11
binary
put %MyPath%
quit
Pause

FTP_automation.batを実行しているときに、パラメーターを渡したファイルがアップロードされません。

スクリプトは、バッチファイルに記載されているftpの後で停止し、バッチファイルで渡したIPアドレスとポート番号に接続していません。

これらのコマンドを手動で入力した場合、完全に機能していました。このコードに対してどのような修正を行う必要がありますか?

2
abhayk

ftpコマンドを別のファイルに配置する必要があります。ターミナルで入力した行を.batファイルに配置して、同じように動作することを期待することはできません。 .batファイルには、Windowsコマンドのみを含めることができます。バッチファイルからftpコマンドを実行すると、コマンドを待ちます。 .batファイルを認識していないため、そこからコマンドを読み取ることはできません。

したがって、コマンドを別のテキストファイル(例:ftp.txt)に配置します。

open 142.245.30.165 21
TESTA9MS
test11
binary
put E\PGP\test_pg
quit

そして、次のように.batファイルから実行します。

ftp -s:ftp.txt
pause

(環境変数からの)動的ファイル名を本当に使用する必要がある場合は、テキストファイルをオンザフライで作成する必要があります。 ftpは変数をサポートしていません。


より優れたFTPクライアントを使用している場合は、バッチファイルにコマンドを含め、環境変数を使用できる場合があります。

たとえば、 WinSCP

set MyPath=E\PGP\test_pg

winscp.com /command ^
    "open ftp://TESTA9MS:[email protected]" ^
    "put ""%MyPath%""" ^
    "exit"

pause

WinSCPを使用したスクリプトの概要については、以下を参照してください。
https://winscp.net/eng/docs/guide_automation

Windows FTPスクリプトをWinSCPスクリプトに変換する のガイドもあります。

(私はWinSCPの作者です)

5
Martin Prikryl