FTP 転送によるバッチ処理

FTP 転送によるバッチ処理

バッチ ファイルを使用して FTP サーバーからファイルを取得しようとしました。結果は次のようになります。

ftp> open files.000webhost.com 21
Connected to us-east-1.route-1000.000webhost.awex.io.
220 ProFTPD Server (000webhost.com) [::ffff:145.14.145.124]
500 OPTS UTF8 not understood
User (us-east-1.route-1000.000webhost.awex.io:(none)):
331 User ***** OK. Password required

230-Your bandwidth usage is restricted
230 OK. Current restricted directory is /
ftp> lcd C:\Users\micah\Desktop\MiniventureLauncher\Game
Local directory now C:\Users\micah\Desktop\MiniventureLauncher\Game.
ftp> cd public_html
250 OK. Current directory is /public_html
ftp> binary
200 TYPE is now 8-bit binary
ftp> recv miniventure.jar
200 PORT command successful
150-Connecting to port 50186
150 13336.1 kbytes to download

その後、停止します。これが私のバッチ ファイルのコードです。

@Echo Off
Set _FTPServerName=files.000webhost.com 21
Set _UserName=*****
Set _Password=*****
Set _LocalFolder=C:\Users\micah\Desktop\MiniventureLauncher\Game
Set _RemoteFolder=public_html
Set _Filename=miniventure.jar
Set _ScriptFile=transfer
:: Create script
 >"%_ScriptFile%" Echo open %_FTPServerName%
>>"%_ScriptFile%" Echo %_UserName%
>>"%_ScriptFile%" Echo %_Password%
>>"%_ScriptFile%" Echo lcd %_LocalFolder%
>>"%_ScriptFile%" Echo cd %_RemoteFolder%
>>"%_ScriptFile%" Echo binary
>>"%_ScriptFile%" Echo recv %_Filename%
>>"%_ScriptFile%" Echo quit
:: Run script
ftp -s:"%_ScriptFile%"
Del "%_ScriptFile%"

サーバーに接続しますが、ファイルはダウンロードされません。

答え1

@martin-prikryl がコメントで示唆しているように、これはほぼ間違いなく Windows ファイアウォールの問題です。

Windows はftp特別な許可なしにリモート ホストに接続できますが、ファイルをダウンロードするには、Windows ファイアウォールを介して着信リモート転送を明示的に許可する必要があります。

着信転送の許可

Windows用のWindowsファイアウォールルールがない場合ftp、コマンドを実行するとrecv、Windowsファイアウォールに受信ルールを自動的に追加するように求められます。マークされたボックスはPrivate networks [...]デフォルトでチェックされているはずです。アクセスを許可しますボタンをクリックして、Windows ファイアウォールに適切なルールを追加します。

例: Windows ftp.exe 経由のダウンロードを許可する

Windows ファイアウォール規則の追加 - スクリーンショット

自宅以外でPublic networks [...]Windows を使用する予定がない限り、チェックボックスをオンにする必要はありません。ファイアウォール ルールを調整するには、管理者である必要があります。ftp

残念ながら、これによって現在のダウンロードを続行することはできないことに注意してください。現在の操作を中止し (通常はCtrl+を使用C)、再試行する必要があります。

ファイアウォールのポップアップは表示されない

転送がハングし、ファイアウォールルールのポップアップが表示されない場合は、Windowsファイアウォールに既にルールが存在している可能性がありますftp(最初にキャンセルさらに、これらのルールは、着信接続をすべてブロックするように設定されている可能性があります (斜線の入った円のアイコンで示されます)。

例: Windows ftp.exe が Windows ファイアウォールによってブロックされる

ftp.exe が Windows ファイアウォールによってブロックされました - スクリーンショット

これを変更するには:

  1. 開けるコントロール パネル\システムとセキュリティ\Windows ファイアウォールマークされたリンクをクリックしてください高度な設定左側の。

  2. の中に高度なセキュリティを備えた Windows ファイアウォールダイアログ(上図参照)で、インバウンドルール左側のリンクをクリックして、メインペインにデータが表示されるまで待ちます。ファイル転送プログラムをクリックしてください名前必要に応じて、カテゴリ見出しを使用して項目をアルファベット順に並べ替えます。

  3. 各ルールを右クリックして、プロパティ。 下一般的なタブで、アクションからBlock the connectionまでAllow the connectionわかりました完了したらダイアログの下部に表示されます。

    例: Windows ftp.exe の Windows ファイアウォール ルールの更新

    Windows ftp.exe ファイアウォール ルールのブロックを解除 - スクリーンショット

  4. 正しく実行されると、斜線の付いた円のアイコンが緑色のチェックマークに置き換わります。

    例: Windows ftp.exe の Windows ファイアウォール ルール - 緑のチェック マーク

    Windows ftp.exe ファイアウォール ルールの緑のチェック マーク - スクリーンショット


独自のルールを作成する

これらのルールを手動で追加(作成)したい場合は、手順1と2に進みます。新しいルール...選択後右側のインバウンドルール。

TCP接続用のルールを1つ、UDP接続用のルールを1つ作成します(プロトコルオプションはプロトコルとポートタブをクリックします。すべてのポート許可されています。範囲タブのプロパティ(通常は任意のIPアドレス) そしてその高度なタブプロフィール(通常はPrivate) 必要に応じて。

最後に、プログラムとサービスタブで、C:\windows\system32\ftp.exeプログラム パスとして例を入力します (不明な場合は、where ftpコマンド プロンプトから使用して適切なパスを表示できます)。


関連情報