[前の記事]« SETした環境変数が表示できない
[次の記事]FINDSTRの実行結果によって条件分岐させたい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「FIND,FINDSTR,SORT…テキストファイル内文字列の操作」索引へ

ログ内の特定文字列の存在をチェックして分岐処理したい

482.
ファイルの中身を参照しての作業について
2005年05月19日(木) 16時20分
マシモ
●DOS/Windowsのバージョン↓
Microsoft Windows 2000 [Version 5.00.2195]

http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/if/1-0054.html
の過去ログを参照したんですが、うまくいかないので
どなたかわかる方教えていただきたいです。

バッチファイルでサーバーからftpでファイルを取ってきます。
その際にftpのログを ファイル名+[日付] で
バックアップを取ります。
このftpが成功したか、失敗したかどうかをftpのログの中身
から調べたいのですが…例えば○○っていう文字列が
あったら失敗として、failed.txtというファイルを作り
そのファイルが存在するかどうかでftpできたかどうか
をチェックする。

という感じで行きたいのですが、いかんせん

>○○っていう文字列があったら失敗として、
>failed.txtというファイルを作り

の部分がどうやっていいのか悩んでいます。
過去ログではできるかどうか微妙な感じだったので
もし、できないなら他の方法でやるしかないのですが…。
(できればツール等は使いたくない。)

うまく説明できているか不安ですが
アドバイスよろしくお願いします。
483.
Re:ファイルの中身を参照しての作業について
2005年05月19日(木) 17時17分
じゃく
こんにちは。

>●DOS/Windowsのバージョン↓
>Microsoft Windows 2000 [Version 5.00.2195]

http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/if/1-0054.html
>の過去ログを参照したんですが、うまくいかないので
>どなたかわかる方教えていただきたいです。

どううまくいかなかったのでしょうか?

>>○○っていう文字列があったら失敗として、
>>failed.txtというファイルを作り

>の部分がどうやっていいのか悩んでいます。
C:\>find "○○" hogehoge.txt
C:\>echo %errorlevel%
というコマンドを実際に試してみてください。
○○がfindで見つかれば0、見つからないと1が環境変数
errorlevelに入ります。(当方XP Pro で確認しました)
484.
Re:ファイルの中身を参照しての作業について
2005年05月19日(木) 17時24分
otn
>●DOS/Windowsのバージョン↓
>Microsoft Windows 2000 [Version 5.00.2195]

http://forum.nifty.com/fpcu/top/doslog01/0054.htm
>の過去ログを参照したんですが、うまくいかないので
>どなたかわかる方教えていただきたいです。

>バッチファイルでサーバーからftpでファイルを取ってきます。
>その際にftpのログを ファイル名+[日付] で
>バックアップを取ります。
>このftpが成功したか、失敗したかどうかをftpのログの中身
>から調べたいのですが…例えば○○っていう文字列が
>あったら失敗として、failed.txtというファイルを作り
>そのファイルが存在するかどうかでftpできたかどうか
>をチェックする。

>という感じで行きたいのですが、いかんせん

>>○○っていう文字列があったら失敗として、
>>failed.txtというファイルを作り

>の部分がどうやっていいのか悩んでいます。
>過去ログではできるかどうか微妙な感じだったので
>もし、できないなら他の方法でやるしかないのですが…。
>(できればツール等は使いたくない。)

>うまく説明できているか不安ですが
>アドバイスよろしくお願いします。

例えば、「log%HIZUKE%.txt に、ERROR という文字列が1つでも存在すれば、failed.txt を作る」であれば、

find "ERROR" log%HIZUKE%.txt >NUL
if %ERRORLEVEL%==0 echo.>failed.txt
もしくは、
find "ERROR" log%HIZUKE%.txt >NUL && echo.>failed.txt

参考URLのページを見ましたが、WinNT4SP6aでは find は結果をERRORLEVELに返さなかったんですね。そんなに不便だとは知りませんでした。findstrとかも無かったのかな?とにかく、Win2000以降なら大丈夫です。

条件が「"ftp> get" で始まる行から次の"ftp>"で始まる行までの間に、"5" で始まる行があれば」とかになるとちょっと面倒ですね。まあ、1行ずつ地道に処理すればできます。
485.
Re2:ファイルの中身を参照しての作業について
2005年05月19日(木) 17時34分
ましも
>どううまくいかなかったのでしょうか?

>本質的には特別難しい処理とはいえないでしょうが、文字列検索に類する標準のコマンドは"FIND"しかなく、これは検索結果をERRORLEVELなどで返してはくれません。ですのでWindowsNTの標準のコマンドの範囲内では苦しいと思います。

とあったので、先入観的にできないものだと
思ってしまいました…申し訳ありません。
DOSに慣れていないために、if文の条件式のところ
にfind等入れてやってみたのですが、うまくいきませんでした。

>>>○○っていう文字列があったら失敗として、
>>>failed.txtというファイルを作り
>>
>>の部分がどうやっていいのか悩んでいます。
>C:\>find "○○" hogehoge.txt
>C:\>echo %errorlevel%
>というコマンドを実際に試してみてください。
>○○がfindで見つかれば0、見つからないと1が環境変数
>errorlevelに入ります。(当方XP Pro で確認しました)

2000でも同様に動作しました。
これで無事ファイルの判定ができそうです。

もしよかったら、環境変数の詳細(どうしてそう書くと環境変数が説明のとおりになるのか)を教えていただけるとありがたいです。

ありがとうございました。
486.
Re2:ファイルの中身を参照しての作業について
2005年05月19日(木) 17時49分
ましも
>例えば、「log%HIZUKE%.txt に、ERROR という文字列が1つでも存在すれば、failed.txt を作る」であれば、

>find "ERROR" log%HIZUKE%.txt >NUL
>if %ERRORLEVEL%==0 echo.>failed.txt
>もしくは、
>find "ERROR" log%HIZUKE%.txt >NUL && echo.>failed.txt

コメントありがとうございます。
処理することができました。

>find "ERROR" log%HIZUKE%.txt >NUL
の最後部分の>nulの意味はなんなんでしょう。
入れなくても動作はしますよね?

>参考URLのページを見ましたが、WinNT4SP6aでは find は結果をERRORLEVELに返さなかったんですね。そんなに不便だとは知りませんでした。findstrとかも無かったのかな?とにかく、Win2000以降なら大丈夫です。

正常に動作しました。ありがとうございます。

>条件が「"ftp> get" で始まる行から次の"ftp>"で始まる行までの間に、"5" で始まる行があれば」とかになるとちょっと面倒ですね。まあ、1行ずつ地道に処理すればできます。

一応複雑な命令はしない予定なので、平気です^^;

どうもありがとうございました。
487.
Re2:ファイルの中身を参照しての作業について
2005年05月19日(木) 17時53分
じゃく
こんにちは。

>参考URLのページを見ましたが、WinNT4SP6aでは find は結果をERRORLEVELに返さなかったんですね。そんなに不便だとは知りませんでした。findstrとかも無かったのかな?とにかく、Win2000以降なら大丈夫です。

Microsoft の以下のページを見る限り、NTでも ERRORLEVELを
返すように見受けられるんですけどね~。
実機をさわれる機会があれば調べておきます。

http://support.microsoft.com/default.aspx?scid=kb;ja;318689
http://support.microsoft.com/default.aspx?scid=kb;ja;194916
488.
Re3:ファイルの中身を参照しての作業について
2005年05月19日(木) 18時04分
じゃく
こんにちは。

>2000でも同様に動作しました。
>これで無事ファイルの判定ができそうです。

良かったですね。

>もしよかったら、環境変数の詳細(どうしてそう書くと環境変数が説明のとおりになるのか)を教えていただけるとありがたいです。

システムが自動的に設定する環境変数については、
set /?で表示されるヘルプの最後に簡単な(不親切な?)説明が
あります。

コマンド拡張機能が有効な場合、SET によって表示される変数の一覧には
現れないいくつかの動的な環境変数があります。これらの変数の値は、変数の
値が展開されるときに動的に計算されます。ユーザーがこれらの名前の変数を
明示的に定義する場合、その定義は下記の動的な定義を無効にします。

%CD% - 現在のディレクトリ文字列に展開します。

%DATE% - DATE コマンドと同じフォーマットで現在の日付に展開します。

%TIME% - TIME コマンドと同じフォーマットで現在の時刻に展開します。

%RANDOM% - 0 から 32767 の間の任意の 10 進数に展開します

%ERRORLEVEL% - 現在の ERRORLEVEL の値に展開します。

%CMDEXTVERSION% - 現在のコマンド プロセッサ拡張機能のバージョン番号に
                     展開します。

%CMDCMDLINE% - コマンド プロセッサを起動したオリジナル コマンドライン
                 に展開します。

これをみても、ERRORLEVEL の説明はわからないかもしれません。
ERRORLEVELは簡単に言うと直前に実行したコマンドの終了コード
がセットされており、通常0が正常で1以上が異常やエラーの場合が
多いです。
この掲示板のコマンドリファレンス→http://fpcu.on.coocan.jp/dosvcmd/batch.htm#if 
もご参照下さい。
489.
Re3:ファイルの中身を参照しての作業について
2005年05月19日(木) 18時11分
otn
>>参考URLのページを見ましたが、WinNT4SP6aでは find は結果をERRORLEVELに返さなかったんですね。そんなに不便だとは知りませんでした。findstrとかも無かったのかな?とにかく、Win2000以降なら大丈夫です。

>Microsoft の以下のページを見る限り、NTでも ERRORLEVELを
>返すように見受けられるんですけどね~。
>実機をさわれる機会があれば調べておきます。

でも、当時、YanaKenさんらが実際にやってみた結果なんですよね。
不思議だ。古いSPだと違うのかと思ったけど、SP6aと書いてあるし。

それはそれとして、
http://support.microsoft.com/default.aspx?scid=kb;ja;194916
に書いてある、

if errorlevel==1 goto NNTPSVC

はひどいですね。実際には、構文解析時に = は無視されて、

if errorlevel 1 goto NNTPSVC

になるんで、「ERRORLEVELが1以上なら」だけど、字面を見ると「ERRORLEVELが1と等しければ」に見える。
514.
Re4:ファイルの中身を参照しての作業について
2005年05月23日(月) 09時34分
じゃく
otnさんこんにちは。

>>>参考URLのページを見ましたが、WinNT4SP6aでは find は結果をERRORLEVELに返さなかったんですね。そんなに不便だとは知りませんでした。findstrとかも無かったのかな?とにかく、Win2000以降なら大丈夫です。
>>
>>Microsoft の以下のページを見る限り、NTでも ERRORLEVELを
>>返すように見受けられるんですけどね~。
>>実機をさわれる機会があれば調べておきます。

>でも、当時、YanaKenさんらが実際にやってみた結果なんですよね。
>不思議だ。古いSPだと違うのかと思ったけど、SP6aと書いてあるし。

NT sp6a で調べてみました。find は結果を返しています。
NTでも%ERRORLEVEL%は有効なようです。
=======================================================
Microsoft(R) Windows NT(R)
(C) Copyright 1985-1996 Microsoft Corp.

C:\>e:

E:\>ver

Windows NT Version 4.0

E:\>if /?>sample.txt

E:\>find "zzz" sample.txt

---------- SAMPLE.TXT

E:\>echo %errorlevel%
1

E:\>find "if" sample.txt

---------- SAMPLE.TXT

E:\>echo %errorlevel%
1

E:\>find "IF" sample.txt

---------- SAMPLE.TXT
IF [NOT] ERRORLEVEL 番号 コマンド
IF [NOT] 文字列1==文字列2 コマンド
IF [NOT] EXIST ファイル名 コマンド
コマンド拡張機能を有効にすると、IF は次のように変更されます:
    IF [/I] 文字列1 比較演算子 文字列2 コマンド
    IF CMDEXTVERSION 番号 コマンド
    IF DEFINED 変数 コマンド
ます。/I スイッチは、IF の 文字列1==文字列2 形式で使うこともできます。
    IF %ERRORLEVEL% LEQ 1 goto okay

E:\>echo %errorlevel%
0

E:\>
==========================================================

>それはそれとして、
>>http://support.microsoft.com/default.aspx?scid=kb;ja;194916
>に書いてある、

>if errorlevel==1 goto NNTPSVC

>はひどいですね。実際には、構文解析時に = は無視されて、

>if errorlevel 1 goto NNTPSVC

>になるんで、「ERRORLEVELが1以上なら」だけど、字面を見ると「ERRORLEVELが1と等しければ」に見える。

otnさん、すぐに見つけちゃいますね。
Microsoft も結構アバウトですね。うまく動くからわかりやすい
記述にしたのかな。
516.
Re5:ファイルの中身を参照しての作業について
2005年05月24日(火) 18時37分
otn
>>でも、当時、YanaKenさんらが実際にやってみた結果なんですよね。
>>不思議だ。古いSPだと違うのかと思ったけど、SP6aと書いてあるし。

>NT sp6a で調べてみました。find は結果を返しています。
>NTでも%ERRORLEVEL%は有効なようです。

やっぱりそうですか。
証人喚問ではないですが、YanaKenさん、ご記憶ありますか?
519.
Re6:ファイルの中身を参照しての作業について
2005年05月24日(火) 22時53分
YanaKen
otnさん どうもです。

>>NT sp6a で調べてみました。find は結果を返しています。
>>NTでも%ERRORLEVEL%は有効なようです。

>やっぱりそうですか。
>証人喚問ではないですが、YanaKenさん、ご記憶ありますか?

 ご指名で出てきました~。
 問題のコメントは初代掲示板の最初期、3年以上前のものとあって、申し訳ないですが細かい記憶はないです。指定した文字列が見つかったときのerrorlevelが0であるため確認ミスした、というのがいちばんありそうかもしれません。

※見つかったときのerrorlevelが0ということは、findが実行できなかったときや指定したファイルが見つからなかった場合との区別がしにくいわけなので、そのへんを念頭に入れていた可能性も……いや、これはないかな。よくわかりません。
 いずれにせよ当該過去ログには補足を入れておきます。すんません。

YanaKen
 

482.ファイルの中身を参照しての作業について マシモ 05/05/19(木) 16:20
483.Re:ファイルの中身を参照しての作業について じゃく 05/05/19(木) 17:17
485.Re2:ファイルの中身を参照しての作業について ましも 05/05/19(木) 17:34
488.Re3:ファイルの中身を参照しての作業について じゃく 05/05/19(木) 18:04
484.Re:ファイルの中身を参照しての作業について otn 05/05/19(木) 17:24
486.Re2:ファイルの中身を参照しての作業について ましも 05/05/19(木) 17:49
487.Re2:ファイルの中身を参照しての作業について じゃく 05/05/19(木) 17:53
489.Re3:ファイルの中身を参照しての作業について otn 05/05/19(木) 18:11
514.Re4:ファイルの中身を参照しての作業について じゃく 05/05/23(月) 09:34
516.Re5:ファイルの中身を参照しての作業について otn 05/05/24(火) 18:37
519.Re6:ファイルの中身を参照しての作業について YanaKen 05/05/24(火) 22:53
 
 


カテゴリー「FIND,FINDSTR,SORT…テキストファイル内文字列の操作」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2005年05月19日 02:44に投稿されたエントリーのページです。

ひとつ前の投稿は「SETした環境変数が表示できない」です。

次の投稿は「FINDSTRの実行結果によって条件分岐させたい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート