• ベストアンサー

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% (4900/10358)
回答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