- ベストアンサー
ftp処理でmove(移動)を行いたい
バッチ処理でデータをftp受信しています。 --------------------------- ユーザ名 パスワード prompt mget abc*.log mdelete abc*.log bye --------------------------- このようなコマンドを行っています。 ftpサーバにはさまざまなファイルが随時生成されます。 この処理では定期的に abcで始まる全てのログファイルをgetし、 abcで始まる全てのログファイルをdeleteしています。 ところが、abcで始まるファイルの生成がランダムのため、 偶然mgetが終わった後でファイルが生成され、 mdeleteを行うと、getしていないファイルまで削除される恐れがあるのです。 そのため、一件ずつ移動を行いたいのですが、 調べてもmoveのようなコマンドがftpで見当たらないのですが なにか、moveに置き換わるような処理はないでしょうか? *windows同士の通信です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ftpはあくまでファイル転送プロトコルなのでmoveなどは無いです。 こんな感じでバッチファイルで。テストはしていません。 set HOST=ホスト名 set USER=ユーザ名 set PASS=パスワード echo %USER%>tmp1 echo %PASS%>>tmp1 echo ls abc*.log tmp2>>tmp1 echo quit>>tmp1 ftp -s:tmp1 %HOST% echo %USER%>tmp1 echo %PASS%>>tmp1 for /f %%F in (tmp2) do (echo get %%F&echo delete %%F)>>tmp1 echo quit>>tmp1 ftp -s:tmp1 %HOST% 別の方法として、Windowsホストのftpサーバーって使ったこと無いのでわかりませんが、もしかすると ren abc*.log abc*.tmp もしくは quote site ren abc*.log abc*.tmp が効けば、後は prompt mget abc*.tmp mdelete abc*.tmp 受信後に、ren abc*.tmp abc*.log で名前を戻す。
その他の回答 (2)
- ken__t
- ベストアンサー率41% (53/129)
はじめまして。 以下の様な流れではだめでしょうか。 1.ftp接続し、対象ファイルの一覧を取得する。 ※一時ファイルに保存する。 2.ファイル一覧のファイルをget,deleteする。 ※一時ファイルの一覧について処理を行う。 3.1.2.を繰り返す。 これであれば、サーバへの接続方法はftpだけで対応ができます。
お礼
確かに!一覧を先に取得しておけば それだけを取得・削除が出来そうですね。 ご回答ありがとうございました(^^)
telnetして moveをつかう じゃだめなのかな?
お礼
ftpサーバは別会社のもので、 ユーザ名とパスワードを振り分けられているのです。 ftpログインなどの管理・チェックも行っているため、 telnet利用はだめかと思います。 他に方法がなければ提案してみますね。 ご回答ありがとうございました(^^)
お礼
あえて名称を変える処理も思いつきませんでした。 そういう方法もあるのですね! 目からうろこです。早速試してみます 最近は便利な機能が最初からセットされているものが増えているため、 こういった、「こうしてはどうか?」といった 考え方がなかなか出来なくなっている気がします。 丁寧なご回答ありがとうございました(^^)。