痔になりやすい生活習慣とは?

【FTPコマンドの戻り値=”2”は何のエラーを意味するのでしょうか?】
あるアプリからbatファイルを起動する仕組みを作っています。
そのbatファイル内でFTPコマンドによるファイル送信をしていますが、
FTPコマンドの戻り値が正常終了の”0”ではなく”2”となってします。
処理結果をログに出すようにしているのですがそこもうまくいっていないようです。
DOSプロンプトを起動してFTPコマンドを手で入力して行くと
ステップごとには正しく動くのですが、bat起動だとだめなのです。
検索してみても「エラーコードの意味」がHitしません。
どなたか教えていただけますか?

【処理詳細を以下に記します。】
内容は、ある制御ファイル(CTL。中身は0バイト)群を
FTP転送し、日付入りファイル名のログに結果を出力するだけです。

○batファイル(引数%1には、アプリから日付が渡されます。)
ftp -s:ftpcmd.txt > ftplog_%1.txt

○Txtファイル
open xxx.xxx.xxx.xxx
(userid)
(password)
cd (処理ディレクトリ)
ascii
prompt
mput c:\FTP\*.xxx.ctl
disconnect
bye

このQ&Aに関連する最新のQ&A

A 回答 (1件)

 単なる ftp コマンドのシンタックス・エラーと考えられるのですが、


いかがでしょうか。

 ※ftp コマンドのシンタックス・エラーの場合、終了コードが 2 になります。
    • good
    • 0
この回答へのお礼

返事が遅れて大変申し訳ありません。
ずっと動いていたコマンドなので文法エラーではないだろう…と
思っていたのですが、勘違いでした。
ログを吐き出すファイル名をフルパスにすることで解消されました。
先日正式な実行環境で確認とれました。
ありがとうございました!

お礼日時:2007/04/20 07:53

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qftpコマンドの戻り値をチェックしたい

現在業務でftpコマンドを用いたバックアップシェルを作成しております。(RHEL4)
クーロンでシェルAを呼び、シェルA内でftpコマンド発行→ファイルB内のftpコマンドを実行→シェルAに戻る、という仕様ですが、このftpコマンドが成功したのか失敗したのかをプログラム上で判断する方法はありますでしょうか?

Aベストアンサー

shogo0809さんの回答に便乗します。
実行ログをファイルに落としてgrepするのがよいと思います。
以前、似たような質問があったので
具体的な手順は参考URLのほうを見てはどうでしょうか?

→シェルスクリプトでFTPの実行結果を取得するには

参考URL:http://oshiete1.goo.ne.jp/qa2656080.html

QシェルスクリプトでFTPの実行結果を取得するには

OS redhat linux
シェル bornシェル

でftpを実行するスクリプトを作っていますが、
ftpの実行結果は取得できるのでしょうか?

ftp -n < ftpCom.txt

宜しくお願いします。

Aベストアンサー

No.1です。補足拝見しました。

直接ftpコマンドの戻り値では実行結果が判断できないので、私が以前に携わっていたプロジェクトでは、FTPサーバが出すエラーコードをgrepでハンドリングしていました。

FTPはコマンドの結果を「行頭に3桁の数字」で出力する仕様になっており、putもgetも送受信が成功した場合は226が出力されるので、

ftp -nv < ftpCom.txt > ftpLog.txt 2>&1

を例えにとると、このコマンドを実行した後に、
grep ^226 ftpLog.txt > /dev/null
if $? ne 0
then
echo "FTPでエラーが発生しました" >> logfile
exit 1
fi

みたいなことをしていました。grep の引数 ^226 は行頭が226から始まる行を検索、という意味で、grepでマッチする行があった場合は0が戻り値となり、マッチしなければ0以外が戻り値となるので、それを利用していました。

実際の運用では、処理が異常終了したときにlogfileを見て、FTPのエラーだったらさらにftpLog.txtを見る、みたいな感じでした。

なお、FTPサーバが返すコードについては下記RFCの4.2辺りを参照してください。もっとも、サーバによってこれら全てが実装されてるとは限りませんが。

http://hp.vector.co.jp/authors/VA002682/rfc959j.htm

No.1です。補足拝見しました。

直接ftpコマンドの戻り値では実行結果が判断できないので、私が以前に携わっていたプロジェクトでは、FTPサーバが出すエラーコードをgrepでハンドリングしていました。

FTPはコマンドの結果を「行頭に3桁の数字」で出力する仕様になっており、putもgetも送受信が成功した場合は226が出力されるので、

ftp -nv < ftpCom.txt > ftpLog.txt 2>&1

を例えにとると、このコマンドを実行した後に、
grep ^226 ftpLog.txt > /dev/null
if $? ne 0
then
echo "FTPでエラー...続きを読む

QFTPの送信結果を検知したい

WindowsでFTPをバッチファイルから呼び出すことを考えています。FTPで送信エラーが発生した場合に、FTPのエラーとして検知したいのですが、その方法をご存じのかたおりましたら教えて下さい。(Windows-NTで標準で提供されるFTPを使用しています)直接私が確認したわけではありませんが、FTP送信でエラーが発生してもFTPの終了コードが0になってしまうらしく、FTPのエラーを検知できないそうです。WindowsであればWindows-NT以外の環境でもかまいませんので、ご存じのかたおりましたら教えて下さい。

Aベストアンサー

標準のツールでやるなら、ftpコマンドの出力をファイルにリダイレクトして、find か findstr コマンドで適当な文字列の有無で判断するしかないですね。

>FTPで転送後に転送先のホスト内のある処理が自動的に動き
とのことですが、転送先ホストで単純にデータファイルの有無で先に進むと、転送途中のファイルを読んだり、転送エラーで途中で終わったファイルを読んだりする可能性があるので、普通は、転送元でデータファイルの正常転送を確認後に目印ファイル(中身は空でよい)を送り、転送先では目印ファイルがあることでデータファイルが正しく受信できたことを判断して目印ファイルを消して先に進む(データファイルを処理する)のが良く使われる手法です。

QFTPコマンドの戻り値について

UnixのシェルでFTPを行っていますが、
接続不可の時にエラーの戻り値を取りたいと考えています。

ただ、

OPEN XXX
user aaa acount bbb
get ファイル名 取得先/ファイル名
bye

というシェルを実行した場合、接続先XXXが有り得ない場合、
戻り値($?)が0以外かと思っていたのですが、表示させると0になっていました。
接続できません、というメッセージは表示されるのですが。。。
戻り値でエラーを判断する方法をご存知の方、よろしく
お願いします。

Aベストアンサー

こんにちわ。
当方ではftpを自動実行する際、以下のようにしてます。

以下、シェルの内容
------------------------------------------------------------------
#!/bin/csh
ftp -n ホスト名 <<EOF >& 標準エラー出力リダイレクトファイル名
user aaa acount bbb
get ファイル名 取得先/ファイル名
bye
EOF

if (-z 標準エラー出力リダイレクトファイル名) then
exit(0)
else
exit(1)
endif
------------------------------------------------------------------
以上、シェルの内容

簡単に言うと、ftpコマンドにてエラーが発生するとそれらは標準エラー出力
に出力されるので、それをリダイレクトしてファイルサイズが0バイトであれ
ばエラーがなかったと判断しています。
エラーが発生した場合は、そのリダイレクトしたファイルを見れば内容がわかります。
今のところ問題なく動作しています。

こんにちわ。
当方ではftpを自動実行する際、以下のようにしてます。

以下、シェルの内容
------------------------------------------------------------------
#!/bin/csh
ftp -n ホスト名 <<EOF >& 標準エラー出力リダイレクトファイル名
user aaa acount bbb
get ファイル名 取得先/ファイル名
bye
EOF

if (-z 標準エラー出力リダイレクトファイル名) then
exit(0)
else
exit(1)
endif
------------------------------------------------------------------
以上、シェルの内...続きを読む

QコマンドプロンプトのERRORLEVELについて!

コマンドプロンプトの記述で、ERRORLEVELというのがありますが
そのERRORLEVELが、0の場合は正常終了と考えていいのでしょうか?

Aベストアンサー

>if not ERRORLEVEL 1 goto aaa
>教えていただいた上記記述なんですが、
>1じゃないということは、2~255も含まれるのではないのでしょうか?
>素朴な疑問ですいません。

if文の文法については、if /? で調べてください。

if ERRORLEVEL 1 goto aaa は、ERRORLEVEL が1以上の時にgoto aaaするという意味です。ということを#4の人が書いてるのですが・・・
従って、その否定である、
if not ERRORLEVEL 1 goto aaa は、ERRORLEVEL が1未満つまり0のときにgoto aaaします(負になることはないので)。

QFTPエラー425

FTPで425エラーが出て困っています。
今まで繋がっていたのが突然繋がらなくなりました。
調べてみると20番ポートが遮断されている可能性が高く、
どこで遮断されているか調べる良い方法があれば教えて下さい。

・クライアント
OS:Windows 8.1、ファイアウォール: Norton Inernet Security
・サーバー(AWS)
OS:Red Hat Enterprise Linux Server release 7.1 (Maipo)
ファイアウォール:AWSのネットワークルール設定

接続は出来ていて、lsを打つとエラーになります。
サーバーにTertermでログインしてlocalhostにftpするとlsできるので、
ftpd自体に問題はなさそうです。
また、サーバー側の設定は直しておらず、突如動かなくなったので、
クライアントのファイアウォール設定が変わったのを疑っていますが、
ファイアウォールを一時停止しても解消しませんでした。
どこが悪いか原因を切り分けられるずに困っています。
原因箇所を調べる良い方法があればご教示ください。

FTPで425エラーが出て困っています。
今まで繋がっていたのが突然繋がらなくなりました。
調べてみると20番ポートが遮断されている可能性が高く、
どこで遮断されているか調べる良い方法があれば教えて下さい。

・クライアント
OS:Windows 8.1、ファイアウォール: Norton Inernet Security
・サーバー(AWS)
OS:Red Hat Enterprise Linux Server release 7.1 (Maipo)
ファイアウォール:AWSのネットワークルール設定

接続は出来ていて、lsを打つとエラーになります。
サーバーにTerterm...続きを読む

Aベストアンサー

>FFFTPで繋いでいて拡張オプションのPASVモードにチェックをつけていないのでpassiveモードではないはずですが、

クライアントソフトはActive FTPで接続しようとしているのは間違いないですね。

>WireSharkで見たところ、後ろにPASVと書かれていました。
>Wireshark結果
>3967 345.551600000 52.27.XX.XXX 192.168.0.4 FTP 105 Response: 200 PORT command> successful. Consider using PASV. ← パッシブモードになっている?

良く読んで下さい。単に「Passiveモードでの使用を検討して下さい」というメッセージです。

クライアントソフトはActive FTPで接続しようとしているものの、サーバ側がActive FTPを恐らくサポートしていないので、「Passiveモードに移行してよ」とメッセージを出した。にも関わらずクライアントはPASVコマンドを実行することもなく、LISTコマンドを実行したので「425 Failed to establish connection」、つまり「だぁかぁらぁ、データセション張ってないんだから」と返したわけです。

「Passiveモードでの使用を検討して下さい」というメッセージは柔らかな表現ですが「いいか、俺はPassiveモードしか受け付けないからな。次はPASVコマンドを打てよな。それ以外は知らんからな」と等価です。まぁ、QUITやBINARYやASCII等は受け付けてくれるとは思いますが。

>またサーバーが20番ポートにセッションを張ろうとしている形跡がありませんでした。
>これはPASVモードになっているのでしょうか?

サーバは少なくともPassiveモードしかサポートしていないようです。なので、サーバからクライアントの20/TCPにはコネクションを張らずに、21/TCPでクライアントからのPASVコマンド待ちです。PASVコマンドがクライアントから来れば、21/TCPでEntering Passive Mode (X,X,X,X,A,B)を返しますので、クライアントはサーバの(A*256+B)/TCPポートに対してSYNを送信、所謂3ウェイハンドシェイクでデータセションが繋がるという流れになります。

>FFFTPで繋いでいて拡張オプションのPASVモードにチェックをつけていないのでpassiveモードではないはずですが、

クライアントソフトはActive FTPで接続しようとしているのは間違いないですね。

>WireSharkで見たところ、後ろにPASVと書かれていました。
>Wireshark結果
>3967 345.551600000 52.27.XX.XXX 192.168.0.4 FTP 105 Response: 200 PORT command> successful. Consider using PASV. ← パッシブモードになっている?

良く読んで下さい。単に「Passiveモードでの使用を検討して下さい」というメッ...続きを読む

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qftpコマンド出力結果の取得

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の中身はカラっぽでした。

ところが、リダイレクションを外し、コマンドファイルのみを実行すると、結果が画面に表示されます。

何故、画面には表示されるのに、リダイレクションやパイプでは結果が渡されないのかが分かりません。

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:実際のパス

これを以...続きを読む

Aベストアンサー

以前の質問に答えてから、手動でやってもできるなと気付きました。creさんの環境でできるか分かりませんが、試してみてください。
コマンドラインから、
ftp SERVER | tee ftp.log
としてください。あとは普通に手動でftp操作をします。ただし私の環境では、ログイン時のユーザ名入力のプロンプトが表示されませんでしたが、表示されているものとしてユーザ名を入力したら、パスワードを聞いてきました。あとは普通にftp操作をして終了すれば、全ての操作履歴がftp.logに記録されます。

結果報告お待ちしてます。

QFTPコマンドのリターンコード取得について

こんにちは。

ASPからWSHでDosバッチファイルを起動して
FTP転送を行おうとしています。

この時、FTPの転送エラー等のリターンコードって
詳細に取得できますか?
例えばファイルが存在していたら、上書きせずに
警告のみ出力するようなこともしたいのですが・・・。

遥か遠い記憶ではFTPのリターンコードは取得できな
かった気もするのですが、宜しくお願いいたします。

Aベストアンサー

ftpがゼロで無いリターンコードを返すのはコマンドラインオプションが不正な時くらいです。

>例えばファイルが存在していたら、
ls . OUT.txt
というサブコマンドを入れるとサーバーのカレントディレクトリのファイル一覧が、クライアント側のOUT.txtファイルに入るので、WSHでそのファイルを読めばファイルの存在は判断できます。

QFTPコマンドでディレクトリごとファイル移動できるコマンドはありますか?

タイトルどおりなのですが、FTPでファイルを転送する際に、サブフォルダを含むディレクトリごとファイル転送するコマンドはありますでしょうか。
ディレクトリの中にあるすべてのファイルを移動したいのですが、サブフォルダがたくさんあるので、わざわざディレクトリの場所へ移動してmputを繰り返すのはめんどうで仕方ありません。
よろしくお願いします。

Aベストアンサー

ご使用になるOS環境が書いてないのですが、Linux,BSD等ならncftpで、get -R dir。
Windowsならffftpを使えば良いと思います。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング