サーバーからローカル マシンにファイルを ftp するスクリプトをいくつか書きました。差分モードでは、スクリプトの動作が異なります。
対話的に実行すると、ftp は問題ありません。
ftp> mget *abc*.reviewed
200 Type set to A.
200 PORT command successful.
150 Opening ASCII mode data connection for xxx_abc_yyyymmdd.reviewed(506 bytes).
226 Transfer complete.
ftp: 506 bytes received in 0.00Seconds 506000.00Kbytes/sec.
Windowsタスクスケジューラでスケジュールした場合、次のみが表示されます:
ftp> mget *abc*.reviewed
200 Type set to A.
次のエラーがあると思われますが、ログはありません。何が間違っていたのでしょうか?
私のコードのサンプル:
call :Logic > E:\ftp_%yyyymmdd%.log 2>&1
exit /b 0
:Logic
ftp -i -s:C:\App\XXX\bin\ftp_script.txt some.host.net
出力をログ ファイルにしますが、エラー ストリームが正常に構成されているかどうかわかりません。エラーログが失われている可能性があります。
ftp_script.txt の内容:
username
password
lcd E:\YYY
cd /XXX/YYY/ZZZ
mget *abc*.reviewed
mget *bcd*.reviewed
mget *cde*.reviewed
bye
さらなるケーススタディ:
スクリプトは、毎日午後 8 時に実行されるようにスケジュールされていました。今日サーバーを確認したところ、目的のサーバーに必要なファイルが含まれていることがわかりました。最後に変更された属性は午後 6 時 54 分でした。したがって、ファイルは午後 8 時にそこにあるはずで、昨日のスケジュールでは ftp ではありませんでした。
最後に変更された属性は、それがコピーされた時間 (他のディレクトリから) または名前が変更された時間 (ファイルの名前を .csv から .reviewed に変更する必要があります) に等しいと想定しています。
午後 12 時 40 分に 1 回限りのタスクをスケジュールしてスクリプトを実行すると、ファイルはターゲット サーバーからローカル サーバーに正常に ftp されました。
本当に混乱します。