コマンドプロンプトのFTPコマンドについて質問 | FTPバッチの成功・失敗判断方法について教えてください

このQ&Aのポイント
  • コマンドプロンプトのFTPコマンドを使用して、WindowsサーバからUNIXサーバにファイルを送信するバッチ処理を作成しました。FTPの成功・失敗をログファイルに出力する方法を知りたいです。
  • バッチ処理では、FTPの設定ファイルとログファイルのパスを指定し、FTPコマンドを実行しています。FTPの設定ファイルには、サーバのIPやポート、ログインID、パスワード、バイナリモード、プロンプトモード、送信するファイルのパターンを記述しています。
  • FTPの実行結果を判断する方法として、ログファイルに「FTPバッチ起動」と「FTP開始」のメッセージを出力し、FTPの実行コマンドをログファイルに追記することで、成功・失敗を判断することができます。また、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失敗の場合、メールを送りたくてこのようなバッチを作成しました。

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

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

>そもそも、転送元のファイルサイズと、転送したファイルサイズが違っているので、 binモードなのにファイルサイズと転送サイズが違っているのなら、転送が失敗していると言うことです。 >また、相手側の都合上WindowsにFTPサーバを常駐させる事はNGらしく、mgetもできません・・・。 ??こちらがWindowsで、相手がUnix(FTPサーバあり)なのでは? 何の問題も無いと思いますが?混乱してませんか?落ち着いてください。

akito0417
質問者

お礼

>binモードなのにファイルサイズと転送サイズが違っているのなら、転送が失敗していると言うことです。 なるほど。 見た感じちゃんと転送できてそうでしたが、ちゃんと調べる必要がありますね・・・。 >??こちらがWindowsで、相手がUnix(FTPサーバあり)なのでは? 何の問題も無いと思いますが?混乱してませんか?落ち着いてください。 確かに、言うとおりです。 UNIXにmputして、別ディレクトリにmgetしてファイルの個数が一致してたらOKにしようと思います。 明日確認してみます。 また躓いたらよろしくおねがいします。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

FINDSTR 等でログファイルから自分が成功と判断する文字列を探してあれば成功と見なします。 特に複数ファイルを転送するようなので、何を以て成功とするか難しいでしょうね。 ログに出る転送バイト数とそれぞれのファイルサイズを比較するのでしょうか。 setlocal enabledelayedexpand ・・・・・ set ERR=0 for /f "usebackq tokens=1-8" %%A in ("%logFileName%") do ( if %%A==150 set for /f %%X in (%%H) do set SIZE=%%~zX if %%A==ftp: if not %%B==!SIZE! set /a ERR+=1 ) if not %ERR% == 0 ( エラーがあった時の処理 ) これは私がさっきやってみたログの場合なので、OSが違うと修正が必要な可能性があります。 他には、mput したあと、別のディレクトリに lcd して mget して、元のファイルとコンペアするとか。

akito0417
質問者

お礼

回答ありがとうございます。 どうやら出来ていないようです。 そもそも、転送元のファイルサイズと、転送したファイルサイズが違っているので、 この方法は使えないみたいです・・・。 また、相手側の都合上WindowsにFTPサーバを常駐させる事はNGらしく、mgetもできません・・・。

関連するQ&A

  • コマンドプロンプトからftpコマンドを打つ

    お世話になります。 コマンドプロンプトからftpコマンドを使ってファイルをアップロードしようと思います。 ですが、ftpとコマンドをコマンドプロンプト内で打つと、 「’ftp’は、内部コマンドまたは外部コマンド、 操作可能なバッチファイルとして認識されていません。」 と表示されます。 打ったコマンド: C:\DocumentAndSetting>ftp IPアドレス 調べてみたのでですが、原因がわからず、質問させていただいた次第です。 どなたかアドバイスお願いします。

  • FTPコマンドを非表示にする

    バッチファイルでテキストファイルを読み込む形でFTPコマンドを実行させて、FTPサーバーからデータをダウンロードさせるのですが、ファイル数が多い為、コマンドが数秒間表示され続けてしまいます。これを非表示にするにはどのようにすればいいですか? バッチでは頭に@ECHO OFFをつけましたが、頭の一行しか非表示にならず、テキストファイル以降に書かれたコマンドは表示されてしまいます。 宜しくお願いします。

  • WindowsServer2003からメールコマンド発行

    1)WindowsServer2003が稼動するデータベースサーバを運用しています。 2)ネットワークとしてはPOP3及びSMTPを両方利用できます。 3)このデータベースサーバ内で日々記録されるログ(テキストファイル)があります。このログからエラーにあたる部分をFINDコマンドで抜き出し、日付でリネームして保存するDOSコマンドのバッチファイルがあります。内容の抜粋は以下の通りです。 set fdate=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2% set ftime=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% FIND "%searcherr%" C:\log.txt >> D:\%fdate%-%ftime%.log 4)このバッチファイルの最後に、UNIXのメールコマンドのように、ある管理者用メールアドレス宛てに、この\%fdate%-%ftime%.logの内容をそのまま添付ファイル(もしくは本文でもよい)として転送したいと思っています。 このような要件の場合、いいOS標準の方法やソフトがあれば教えてください。 なお、CMAILというフリーのソフトを入れてバッチコマンド上から起動してみましたが、どうもうまく動作してくれませんでした(手動でコマンドを発行するとうまくいきましたが。。。)

  • コマンドプロンプト、FTP

     コマンドプロンプトでftp> open 192.168.24.72としても > ftp: connect :エラー番号が不明ですとでてしまいます。 家庭内のLAN環境のなかでファイルをやり取りするのにコマンドプロンプトやIEをつかってファイルのやり取りをするにはルーター設定でサーバー側のFTPポートをあけてやる必要があるのでしょうか? ファイル共有は面倒なのでできれば避けたいのですが・・・・

  • コマンドプロンプトでFTPでエラー

    FTPコマンドプロンプトについてお聞きしたいです。 フォルダの中に 01.bat、01.txt、index.htmlが入っています バッチの中身は ftp -s:ftp00.txt テキストの中身は open サーバー名 ユーザー名 パスワード asc put index.html disconnect bye これを実行したら以下の様になったのですが、なにが原因なのでしょうか? スクリプト ファイル ftp00.txt を開くときにエラーが発生しました。 それともう一つ質問があるのですが、 手動でFTP情報をコマンドプロンプトに入力していったら ホスト接続完了→ユーザー名完了→パス入力のところで なぜかキーボードが入力できなくなってしまいます。 なぜでしょうか? osはvistaです。

  • 日付ファイルを検索して結果を変数に入れたい

    LOGDIRディレクトリにYYYYMMDDhhmmss.log形式のログファイルが複数あります。 ここから当日日付のログファイルを取り出して、順番に処理にかけたいのですが、 うまく行きません。どなたかご支援願えますでしょうか? LOGDIRディレクトリのファイル ====================================== 20120401093020.log 20120402093020.log 20120403093020.log 20120404093020.log 20120405093020.log 20120405123000.log ====================================== 以下、作成したバッチです。 ====================================== set RESULT= set DAY=%date:~-10,4%%date:~-5,2%%date:~-2,2% set LOGDIR="J:\Temp\log\" set TLOGDIR="J:\Temp\tmp\aaa\" REM set TFILE=`dir /B %LOGDIR% ^| findstr %DAY%.` echo %TFILE% for /f "usebackq tokens=*" %%i in (`dir /B %LOGDIR%^| findstr %DAY%.`) do (set RESULT=%%i) xcopy /y %LOGDIR%%RESULT% %TLOGDIR% ====================================== 実行日が20120405だとした場合、20120405093020.logと20120405123000.logを処理したいのですが、 20120405123000.logしか処理されません。 2つとも処理したい場合はどうすれば良いでしょうか? よろしくお願いします。

  • FTPコマンドの記述方法

    FTPサーバーからCSVファイルをダウンロードしようとftpcmd.txtファイルに下記を記述しました。コマンドプロンプトではファイルの取得に成功しています。 open server_name password get remote_file local_file close bye 問題は、この取得したファイルを差し替えるローカルPC側のリダイレクトの場所である[ログファイル名]の.batファイルの記述の仕方がわかりません。 ftp -s:ftpcmd.txt > [ログファイル名]←ログファイル名の記述方法 例えば、”C:¥”に置きたい場合はどのように記述すればよろしいのでしょうか? よろしくお願いします。 ちなみに下記のHPを参考にして作成しました。 http://www.psytec.co.jp/tips/0102/

  • コマンドプロンプトでFTPできない

    こんばんわ。 題の通りなのですが、コマンドプロンプトで FTP接続しようとして普段FFFTPで更新している ファイルをコマンドプロンプトから更新しようと考えたのですが、 相手サーバに接続は出来るのですが、その後コマンドを入力しても ftp> dir 200 PORT command successful 425 Unable to build data connection: Connection timed out 上記のようになってしまいます。 何か原因があるはずなのですが・・・自分ではわかりませんでした。 もし何かわかる方いらっしゃいましたら助言いただければと思います。 よろしくお願いいたします。 ちなみにOSはXPです。

  • コマンドプロンプトサービスの停止と開始について

    OS Windows Server2003 バックアップを取るため SQL Serverサービスをタスクで自動で開始と停止をやりたいんですが、 バッチを組み実行したところ、開始は問題ないのですが 停止するときにバッチがそのまま止まってしまいます。 ログを調べたところ次の文面が表示されていました。 ※「次のサービスは MSSQLSERVER サービスに依存しています。 MSSQLSERVER サービスを停止すると、これらのサービスも停止されます。    SQLSERVERAGENT この操作を続行しますか? (Y/N) [N]: 」 コマンドプロンプトで「y」を実行すると停止します。 このようにバッチを組んでいます。 開始バッチ set log=c:\log\SQL-service-start.log net start mssqlserver >> %log% net start SQLServerAgent >> %log% 停止バッチ set log=c:\log\SQL-service-stop.log net stop mssqlserver >> %log% 申し訳ございませんが、ご教授の方お願いします。

  • ftpコマンド出力結果の取得

    ftpコマンドのバッチ処理によってファイルの一覧の結果を取得したいのですが、 リダイレクション等を用いても取得できません。 どのようにすればいいか教えてください。 **************状況************* OSおよびOSレベル:AIX5.2 シェル:Kシェル コマンドファイルの中身(ftp.txt) cat << EOF | ftp -n open SERVER user USER PW cd PATH ls -l bye EOF SERVER:実際のサーバー名 USER:実際のユーザー名 PW:実際のパスワード PATH:実際のパス これを以下のように実行し、結果を取得しようとしました。 # ./cmd.ftp > log しかし、出力ファイルlogの中身はカラっぽでした。 ところが、リダイレクションを外し、コマンドファイルのみを実行すると、結果が画面に表示されます。 何故、画面には表示されるのに、リダイレクションやパイプでは結果が渡されないのかが分かりません。

専門家に質問してみよう