• ベストアンサー

ftp処理でmove(移動)を行いたい

バッチ処理でデータをftp受信しています。 --------------------------- ユーザ名 パスワード prompt mget abc*.log mdelete abc*.log bye --------------------------- このようなコマンドを行っています。 ftpサーバにはさまざまなファイルが随時生成されます。 この処理では定期的に abcで始まる全てのログファイルをgetし、 abcで始まる全てのログファイルをdeleteしています。 ところが、abcで始まるファイルの生成がランダムのため、 偶然mgetが終わった後でファイルが生成され、 mdeleteを行うと、getしていないファイルまで削除される恐れがあるのです。 そのため、一件ずつ移動を行いたいのですが、 調べてもmoveのようなコマンドがftpで見当たらないのですが なにか、moveに置き換わるような処理はないでしょうか? *windows同士の通信です。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4832/10226)
回答No.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 で名前を戻す。

April8
質問者

お礼

あえて名称を変える処理も思いつきませんでした。 そういう方法もあるのですね! 目からうろこです。早速試してみます 最近は便利な機能が最初からセットされているものが増えているため、 こういった、「こうしてはどうか?」といった 考え方がなかなか出来なくなっている気がします。 丁寧なご回答ありがとうございました(^^)。

その他の回答 (2)

  • ken__t
  • ベストアンサー率41% (53/129)
回答No.2

はじめまして。 以下の様な流れではだめでしょうか。 1.ftp接続し、対象ファイルの一覧を取得する。 ※一時ファイルに保存する。 2.ファイル一覧のファイルをget,deleteする。 ※一時ファイルの一覧について処理を行う。 3.1.2.を繰り返す。 これであれば、サーバへの接続方法はftpだけで対応ができます。

April8
質問者

お礼

確かに!一覧を先に取得しておけば それだけを取得・削除が出来そうですね。 ご回答ありがとうございました(^^)

noname#39970
noname#39970
回答No.1

telnetして moveをつかう  じゃだめなのかな?

April8
質問者

お礼

ftpサーバは別会社のもので、 ユーザ名とパスワードを振り分けられているのです。 ftpログインなどの管理・チェックも行っているため、 telnet利用はだめかと思います。 他に方法がなければ提案してみますね。 ご回答ありがとうございました(^^)

関連するQ&A

  • ftpコマンドで丸ごとダウンロード

    ftpコマンドでWebのドキュメントルートごとgetはできませんか? getで1ファイル落とせます。 mgetでカレントのファイルを全て落とせます。 それだけでなく、 ディレクトリを丸ごとダウンロードしたいのですが、それはftpのコマンドでは無理なのでしょうか? いろいろ検索してみました。 下記のような情報はあります。 http://sasuke.main.jp/ftpcommand.html でも、ディレクトリ毎落とせるのかどうかイマイチわかりません。

  • バッチファイルからftpコマンドを使って不特定のファイルをダウンロードしたい。

    バッチファイル上のftpコマンドを使ってftpサーバーにあるカレントディレクトリー以下のファイルを一切合切ダウンロードしたいのですが、なんかいい方法ありませんか?   ↓ここをなんとかしたいのですが   dir|mget ※[]は各設定を入れる ↓バッチファイル ----------------------------------- ftp open [127.0.0.1] [User] [Password] dir | mget by --------------------------------

  • FTPコマンド mgetでとまってしまう

    コマンドプロンプト画面から open www.foo.or.jp funfun abcdefg cd test cd csv lcd C:\test prompt mget *.csv このように打ち込んでいるんですが mget *.csv でとまってしまいます mget * でも駄目です そこまではうまくいくのですが・・・ パソコンによって、mgetコマンドが不可能とかありますか? それともFTPのバージョンなどあるんでしょうか?? よろしくお願いします。

  • コマンドプロンプト FTPコマンドについて

    こんばんわ。 今回はコマンドプロンプトのFTPコマンドについて質問させてください。 処理概要 Windowsバッチにて、サーバA(Windows)からサーバB(UNIX)にFTPでファイルを複数送りたい その際、FTPが成功したか失敗したかをログファイルに出力したい。 以下プログラム set logDir=C:\hogehoge\log\ set settingFileName=C:\hogehoge\upload.ftp set execDate=%date:~-10,4%%date:~-5,2%%date:~-2,2% set logFileName=%logDir%log_%execDate%.txt echo FTPバッチ起動 >> "%logFileName%" cd C:\hogehoge echo FTP開始 >> "%logFileName%" ftp -s:"%settingFileName% >> "%logFileName%" upload.ftpというファイルには以下のように記述しております。 ftp open サーバIP ポート ログインID パスワード binary prompt mput *.csv bye この2種類のファイルで、FTPは出来るのですが、 どうにかして成功/失敗を判断したいです。 どなたかわかる方、ご教授お願いいたします。 補足 UNIX上のバッチ処理(Cシェル)でもファイルがあるかどうか判断していますが、 WindowsでFTP失敗の場合、メールを送りたくてこのようなバッチを作成しました。

  • バッチファイルにてFTPで指定したファイルを取得する

    OSはWindoswXPProです。 以下のようなBATファイルとバッチファイルを作成しました。 ---FTP.bat--- echo off ftp -s:get.ftp ---get.ftp--- open 10.0.X.X username password cd /log get log.yymmdd(実際には日付) c:\access_all_log.txt quit logというディレクトリには日次でログファイルが作成され ファイル名としてlog.yymmddと名づけられています。 やりたいことは2つあります。 1つめはftpするファイル名の日付部分をコマンドなどから 範囲指定して取得するファイルを指定できないか。 (たとえば070301~070315のファイルを一括で取得したい) 2つ目はftpでのファイル取得終了後に続いて バッチスクリプトを流したいのですが、その方法。 お分かりになる方いらっしゃいましたらよろしくお願いいたします。

  • ftpのコマンド詳細をお教えください。

    「UNIXファイルサーバ内のデータ群」を「Win2000ProのDISK内」に、PC側の操作(FTP)で持ってこようと思います。FTPは出来るのですが、UNIXファイルのあるディレクトリ以下をすべて(子、孫ディレクトリを含めて(穴を掘って))持ってきたいのですが、ftpでサーバに入ってから prompt bin mget * とすると、直下のファイルと、その子は取ってこれます。でも孫以下のディレクトリ以下が持ってこれません。どのようにすれば可能でしょうか? また、持ってこれた子ファイルは、PC内の同一フォルダに一斉に落ちるため(フォルダを生成してくれない)ファイル名が重複している場合こまります。 PC側にも、元と同じようなディレクトリ構成で持ってくるにはどのようにすればいいでしょうか?

  • バッチファイルからftpを実行時に処理完了を待たない方法

    ある市販のjava系のアプリから時間起動でバッチファイルを起動します そのアプリは同時に複数のバッチファイルを起動できない仕様で ある外部プログラム(バッチファイル)を起動したら処理の完了を 待ってから次の処理バッチファイルを起動するのです 同時起動はできません なので最初に起動したバッチファイルがフリーズしてしまうと 次のバッチファイルが起動できずに永遠と待ち状態になってしまうんです そのソフトのメーカーに問い合わせしてみたのですが 呼び出し側はタイムアウトさせるような設定はない仕様なので 呼び出ししたプログラムのほうでタイムアウトするようにして下さい という回答でした なんとか回避しようと そのバッチファイルは ftp -s:c:\cmd.txt というようにftpコマンドを利用しているのですが (稀に何らかの原因でftpがフリーズしてしまう現象があります) ftpコマンドがフリーズしてしまったらどうしょうもないですよね・・・ この現象を回避したくて バッチファイルを start ftp -s:c:\cmd.txt exit に変更しました こうすればftpの完了を待たずにバッチファイルが終了するので たとえftpの処理が一つフリーズしてしまったとしても 別のバッチファイルの起動は問題なく行えると考えたからです しかしその市販アプリが内部的にどのようにバッチファイルを起動しているかわからないのですがテストしてみましたところ (ftpのコマンドをわざとquitしないようにして終了しないftp処理にして バッチファイルを起動してみたのです) 結果としては起動したバッチファイルが完了したとはみなしてくれず 次のバッチファイル起動ができないまま永遠に待ち状態になってしまいました・・・ バッチファイルからftpコマンドを別プロセスで起動する (ftpの完了を待たずにバッチファイルを終了させる) という事はできないでしょうか? アドバイスお願い致します

  • バッチ処理:フォルダ間ファイル移動を繰り返す

    フォルダ間でファイル移動を繰り返す処理を行いたいと思ってます。 例えば、 ファイル移動コマンド: move c:\TEST\*.dat \\192.168.1.5\TEST\ すべてのファイル移動完了後、逆方向にファイル移動: move \\192.168.1.5\TEST\*.dat c:\TEST この処理をバッチで繰り返したいのですが、すべて移動したことを確認して、逆方向に移動をする処理のやり方がわかりません。何かよい方法はないでしょうか。 コメント頂けると幸いです。

  • FTPの作業をWindows上のバッチでおこないたい

    こんにちは。Windowsは初心者です。 あるファイルを別のサーバーにFTP(PUT)したいと考えています。 コマンドプロンプトからFTPのコマンドをたたくのではなく なにかバッチファイル?のようなもので、中に一連のFTP処理を記述し バッチファイルを起動という形で処理を行ないたいのです。 バッチファイルの作成の方法がわかりません。 またFTPの記述の仕方がわかりません。あるファイルを別のサーバに FTP(PUT)したいだけなのです。またエラーも認知したいとも思っています。 どんな本を読めば分かりますでしょうか? また具体的なコード(バッチに記述するFTPのコード)を知っていましたら 教えて下さい。

  • FTPのバッチ処理について質問です。

    300のバーチャルホストからデータをダウンロードする必要が発生し、 たまたまそのサーバーが共有サーバーで借りているものだったため、 コンソールから入る事ができず、FTPでダウンロードすることになりました。 ただ、数が多すぎる為FFFTP等でダウンロードするには時間がかかり過ぎ、 時間がない状況の為、FFFTPは不向きだと思い、バッチファイルを作成したものの、 ダウンロードしたファイルが壊れている事がわかりました。 「ファイルのダウンロードができているか」を確認せずに(できずに)1秒程度で 次のファイルのダウンロードが開始されてしまっているからだと思うのですが、 何か良い方法はありませんでしょうか。 ファイルは以下の二つです。 <ファイル1>  mkdir #ダウンロード先その一#  ftp -s:ファイル2 #ホストA#  mkdir #ダウンロード先その二#  ftp -s:ファイル3 #ホストB# <ファイル2、3他>  #ユーザー名#  #パスワード#  cd #該当フォルダ#  lcd #ダウンロード先#  prompt  mget *  qui すみません。 よろしくお願いいたします。