• ベストアンサー

ftp受信確認

FTPサーバはwindows2003のIISです FTPクライアントはwindows2000,xpの標準添付のftpコマンドです バッチファイル中でFTP -S:C:\FTPCMD.TXT みたいな感じで起動していますが FTP正常・異常にかかわらず常にERRORLEVELは0が 返ってきます なんとかバッチファイル中で正常通信できたか できないか判断したいのです その判断方法をアドバイス下さい ※その他の手段として  バッチファイルでコマンド起動できるFTPクライアントソフト  (できればフリー)を使えばERRORLEVELが返ってくるよという  ものがありましたら紹介頂けると嬉しいです もしくは ProFTPDが転送中のファイルを".in.{ファイル名}"として、転送完了すると"{ファイル名}"に変更する機能がある そうですがこれと同じような機能はIISのFTPにはないのでしょうか? 設定を探してみましたが見つかりませんでした (FTPサーバーはIIS以外に変更できません)

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4851/10265)
回答No.2

ftpコマンドの終了コード(ERRORLEVE)は、ftpコマンド自体の正常終了・異常終了を表します。例えば、ftp -s:存在しないファイル だと、ERRORLEVEL が非0になります。 getやputといったサブコマンドの正常・終了は、補足に書かれている通り、メッセージを見るしかないです。 >findコマンドの判定をバッチファイル中で行う方法さえ ERRORLEVEL をご存じなのに何故?? ftp -s:xxxx > xxxx.log FIND /i "226 Transfer complete" c:\xxxx.log >NUL exit /b %ERRORLEVEL% もしくは、 ftp -s:xxxx > xxxx.log FIND /i "226 Transfer complete" c:\xxxx.log >NUL if ERRORLEVEL 1 exit /b 1 exit /b 0 注意としては、get/put だけでなく lsやdirでもtransfer completeが出ますので、それらを使うと必ずfindが成功します。

ken090301
質問者

お礼

ありがとうございます

その他の回答 (1)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.1

FTPコマンドにそれらの機能が、あるはずもありません。もともと、自動化を狙ったこまんどでないため、軽快に簡単に使う事を目的としています。 自動化には、WSHやPowerShellなるものを用意していますね。UNIX系ならシェルスクリプトで達成できますが、Windowdsではこの2つです。 代替のやり方として、FTPから出力されるメッセージを拾うやり方がありますね。エラーメッセージだったら、ファイル名を変更する、などと操作すればいいだけです。 例として下記のような仕組みを利用する方法があります。 http://msdn.microsoft.com/ja-jp/library/cc364510.aspx 又、WMIなどをWSHから使う方法もあります。このWMIはエクセルなどからも使えるので、面白かもしれません。 ようは、標準出力に出力される場合の処理と、エラー出力に出力される場合、両方の場合、調査して、それぞれループさせれば、希望の仕組みはスクリプトレベルでカスタム可能です。 これはらは、ASPなどからも使用可能ですので、IISから公開するWebページとの組み合わせも可能です。業務用のWebアプリはこれらを駆使してなりたっています。 なお、.NETを使えば簡単にできます。

ken090301
質問者

お礼

こんにちは FTPコマンドにはありませんでしたか・・・ WMIをWSHから使ったことが無いので 具体的にどのようにプログラミングしていいか わかりませんでした FTPコマンドのメッセージを拾うサンプル等 どこかのホームページで見られないでしょうか? .NETを使う場合というのは .NETでFTPクライアントと同等の機能を持った汎用的な プログラムを作る(失敗時にはちゃんとしたエラーコードを返す) という事でしょうか? VISUALBASIC.NETは使った事はありますが まだ同等機能を自作するまではできません・・・ こちらもどこかのホームページで何かサンプル等があるなら 参考にしたいのですがご存知ないでしょうか?

ken090301
質問者

補足

ふと思ったのですが FTP -S:C:\FTPCMD.TXT > C:\XXXX.LOG みたいにリダイレクトして このファイルをバッチファイル中で FIND /i "226 Transfer complete" c:\xxxx.log でを活用して判断できないでしょうか? わからないのがfindコマンドを手動で実行する分には 人間が目視すれば結果がわかりますが これをバッチファイル中で findコマンドを実行し結果により指定 キーワードが見つからない場合は exit /b 1 で終了し(終了コード1を返す) キーワードが見つかった場合は exit /b 0 で終了する(正常終了) みたいな判断をfindコマンドを使う事によりできないでしょうか? findコマンドの判定をバッチファイル中で行う方法さえ わかれば・・・

関連するQ&A

  • ftp後の確認

    自動起動のバッチファイルで複数ファイルをftpした後に、転送が上手く行ったことを確認したいのですがどうすればよいのでしょうか?  コマンドであれば、転送したファイルと同じファイルが存在すれば 良いと思うのですが、自動バッチファイルなら通常どうされているのか 良くわかりません。  初歩的な質問で申し訳ありませんが宜しくお願いします。

  • IIS4.0のFTPサービスについて

    いつも大変お世話になっております。 本日はIIS4.0上のFTPサービスについて質問が ございます。 現在本サービスを使用した運用を検討しており ますが、データの転送(Putコマンド)に関して 質問がございます。 FTPサーバである「A」に対し、クライアントB からログオンします。 このまま「Putコマンド」を使用し、ファイルを 転送した場合の転送先はカレントディレクトリ、 ログオンしたばかりのこの場合、サーバA上に設定 されたホームディレクトリになると理解しております。 そこでご質問なのですが、FTPのコマンドでカレント ディレクトリ以外に対しファイル転送する事は 可能なのでしょうか? 逆にそのような事ができない為、仮想ディレクトリ という機能が存在しているのでしょうか? どなたか知識をおもちの方、ご回答宜しくお願い 致します。

  • FTPで存在しないファイルをGETしたときの動作について

    皆様 FTPコマンドで、FTPサーバ上に存在しないファイルをGETした場合の動作について教えてください。 Windowsのコマンドプロンプトで、FTPを使い、ファイルを取得しようとしています。 たまたま、取得対象ファイルがサーバ上に存在しない場合、サーバからのステータスコードは550であるのに、0バイトのファイルが保存されてしまいます。 これは、通常の動作でしょうか? (私の知る限り、0バイトファイルを生成するFTPクライアントは無いのですが…) あるいは、何か設定等に問題があるのでしょうか? 設定等に問題が有る可能性があれば、それを教えてください。 ちなみに環境は 【クライアント】 OS:WindowsXP SP2 【サーバ】 OS:Windows2003サーバ FTPサーバ:Microsoft FTP Service(IIS) です。 よろしくお願いします。

  • バッチ処理でftpから自動的にダウンロード

    バッチ初心者です。 バッチを使用してLAN内のftpサーバーからcsvを別のマシンのフォルダへ定期的(10分毎)にダウンロードするようにしたいのです。 テキストファイル(ファイル名ftpcmd.text)に以下のように記述しました。 open 「ftpサーバーのIPアドレス」 「ユーザー名」 「パス」 mget*.csv quit バッチファイル(auto_ftp.bat)に以下のように記述しました。 ftp -i-s:ftpcmd.txt ダウンロード先の指定と10分毎に実行させるにはどのようにすればいいですか? 宜しくお願いします。

  • Windows マシンでFTPバッチが動かない

    Windowsサーバから、UNIXサーバにFTPでファイル取得しようとすると、エラーがでてすすみません。 コマンドプロンプトで 対話的に動かす分には問題なく動作するのですが、バッチで動かすと エラーがでてしまうのです。 動かそうとしているバッチファイルとその読み込みスクリプトは以下です。 (変数部分はぼかしています) ==== myftp.bat BGN ==== set dirname=%DATE:/=% mkdir D:\master\%dirname% ftp -s:ftpcmd.txt ==== myftp.bat END ==== ==== ftpcmd.txt BGN ==== open hoge user_naem pass_word bin lcd D:\master get file.txt quit ==== ftpcmd.txt END ==== これらを動かすと、 スクリプト ファイル ftpcmd.txt を開くときにエラーが発生しました。 というエラーがでて前に進みません。 対話ベースでは、ftpcmt.txt ファイルの内容をコピペして、きちんと動くので、 何が原因がわかりかねています。 どなたか知恵を貸してください。

  • WindowsServerのIISでFTP

    WindowsStrageServerのIISで FTPサーバーを機能追加しようとしたところ FTPというのに一番近いのは TFTPクライアントというのは見つけたのですが、 FTPサーバー機能を追加したい場合はこれをインストールするといいのでしょうか? よろしくお願いします。

  • 時刻設定

    ftpでファイルを転送するとサーバ側の日時が狂っていたので、hwclockを実行しても何も反応がありません。 エラーも表示されません。 何をどうしたらいいのかまったくわからない状態です。 dateコマンドではちゃんと時刻を出してくれるのですが・・・ クライアント:FFFTP サーバOS:Fedoracore4 FTPサーバ:proftpd どうぞよろしくお願いします。

  • NTサーバーへのFTP送信

    WindowsNTServer4.0、IIS3.0、FTPは実行中です。 ここへFTPでファイル転送したいのですが、USER・PASSWORD は何を指定するのか、NT側のどこかにuserを登録するのか わかりません。教えてください。お願いします。 ちなみにクライアントはFujitsuのGP6000(ASP)なのですがこちらの コマンドは理解してます。

  • FTPのGetで応答がありません。

    FTPサーバはUnixでFTPクライアントはWindowsです。 単純にコマンドプロンプト画面からftpを行い、 サーバーからファイルを取得しようとしたところ、 応答がありません。 何が原因なのか皆目見当がつかない状況です。 考えられる原因を教えていただけないでしょうか?

  • FTP転送中断について

    以下の手順でFTP転送を中断した場合に、直ぐに転送が中断が中断されなくて(セッションがクローズされない)困っています。直ぐに中断できる方法を知っている方、教えてください。 [1]8台のクライアントから同時にFTP転送を要求する。 [2]8台分の転送中に4台でFTPクライアントをSIGKILLで強制終了させる。 [3][2]の直後に4台のFTPクライアントから[1]とは別のデータ転送を要求する。 このときに、2台分のFTPクライアントでNotConnectedとなってしまいます。理由は、SIGKILLでFTPセッションをクローズしようとしたが、クローズしきれずに、8本のセッション+4本のセッションを同時接続しようとして、FTPライセンス数オーバー(8+4>10)により、接続できないようです。 また、調査の結果、SIGKILL時に別クライアントの転送処理が実行されている場合、その転送が完了するまで、SIGKILLをサーバー側で検知してくれません。別クライアントの転送処理が全く実行されていない場合は、SIGKILL直後にサーバー側で即座に転送中断&セッションクローズをしてくれます。 データ転送の有無に因らず、FPTクライアントの転送中断を即座に確実に実行する方法がありましたら教えてください。 とにかくやりたいことは、「8本転送中に、4本を直ぐ止めて、直ぐに別の4本のデータを転送したい」です。 <環境> FTPサーバー(WindowsPC×1台):WindowsXPのIISのFTP *IISのFTPサーバーは最大10本の同時接続が可能。 FTPクライアント(LINUXPC×8台):LINUXのFTPクライアント