• ベストアンサー

DOSのバッチでファイル内を変換したい!

現在、下記のような夜間バッチをDOSで作成したいと思っています。 1.ATコマンドの毎日夜間スケジュールで下記を実地 2.IISのLogのバックアップ 3.Logの内容で下記が含まれる行を削除   削除対象文字列:gif 1と2は完成したのですが、3の方法が思いつかず。。。。。 そもそも出来るものなのかも不明な状態です。 どうかどのようなアドバイスでも良いので是非、コメントを どうかお願い致します。

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

  • ベストアンサー
  • you-m
  • ベストアンサー率58% (190/327)
回答No.5

現在出ている回答だと、問題が発生しそうなケースがあるので、まとめがてら、書かせて頂きます。 まず、確認すべきなのは、3.の処理の目的です。 補足も含めて特に明記されてはいないようですが、gifという文字列を含む行を削除するというのは、gifの画像ファイルへのアクセスログは除外するという事だと思われます。 以下の説明は、その前提で進めますが違っていたらごめんなさい。 1.検索文字の大文字・小文字  IISでは、index.htmlもINDEX.HTMLも同じようのアクセスできますが、ログファイルにはブラウザからの接続URLの記述通りに記載されます。従って、hogehoge.gifとHOGEHOGE.GIFは同じファイルとして扱われますが、ログの記述的には、大文字小文字がリクエストに忠実にかかれます。従って、find にしてもfindstrにしても/Iオプションをつけて大文字小文字を無視させる必要があります。 2.単純文字列検索による問題  例えば、findで「find /V /i "gif" ex031127.log」のように実行した場合、次のような文字列も除外の対象になります。 ・gift_set.html この場合は、必要な情報まで間引きされてしまうことになるでしょう。 findで検索する場合には、".gif"とすればもう少し精度を上げることができますが、さらに確実にするのであれば、findstrを使用することをお勧めします。 findとの大きな違いは、検索文字列をパターンで指定できることです。一般に正規表現と呼ばれるパターン指定の方法の詳細については割愛しますが、今回使用するものは、非常に簡単なものです。 findstr /V /I /R "\<.*\.gif\> " ex031127.log /Rは指定した文字列を正規表現として扱うというものです。 ここで指定したパターンの意味はこのようなものです。 「任意の文字列の後ろに.gifという文字列を含む単語と空白」 IISのログのフォーマットはデフォルトでは、URLのパス名の後ろに「 - 」という区切り文字があり、その後ろにステータスコードとユーザーエージェントが続きます。 よって単語の一番後ろが「.gif」でさらに後ろに空白が続くという条件であれば、ほぼ間違いなくgifファイルへのアクセスログのみを抽出もじくは除外できるわけです。 正規表現の詳細については、詳しく知りたい場合は書籍などを読んで下さい。 最終的には、以下のようなコマンドラインが実行されることになるかと思います。 findstr /V /I /R "\<.*\.gif\> " [元ログファイル名] > [編集後のログファイル名]

その他の回答 (4)

  • yomo3
  • ベストアンサー率32% (88/269)
回答No.4

横レスです。m(__)m >出力結果をファイルにリダイレクトさせるコマンドは >どのコマンドになりますでしょうか? 「リダイレクト」ってのは、コマンドではないのですね。 例えば、 find /v "文字列" ファイル名1 >ファイル名2 の'>'から後のことですね。 DOSは標準出力が'Console'つまり画面に設定されていますが、その出力先を変更するということです。 ファイル名2を'LPT1:'などとするとプリンタに出力されます。プリンタ、プリンタドライバがDOSモードに対応していればですが。

  • LemonT
  • ベストアンサー率49% (39/79)
回答No.3

こんにちは。 findstrコマンドでどうでしょうか。 findstr /V gif ログファイル名称 「/V」の意味は、 findstr /? で見れます。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

FINDコマンドを使用してください。 詳しくは、コマンドプロンプトで find /? で。 出力結果をファイルにリダイレクトさせればOKです。

nsakurako
質問者

お礼

ありがとうございました! 今、find /? で確認してみました! これならコマンドのみでも出来るかも知れません! 希望が見えてきました。 本当にありがとうございます。 ただ、甘えでもう一点質問させてください。 出力結果をファイルにリダイレクトさせるコマンドは どのコマンドになりますでしょうか? 度々の質問で申し訳ないです。 もしもご存知でしたら教えて頂けないでしょうか? どうぞ宜しくお願い致します。

nsakurako
質問者

補足

意味が分かりました!!! 「出力結果をファイルにリダイレクト」ですね!! 本当に何も分からずで申し訳なりませんでした! これで本当に出来そうです!! 本当に本当にありがとうございました!

  • K-1
  • ベストアンサー率21% (832/3844)
回答No.1

「マルチ文字列取り除き」 http://www.vector.co.jp/soft/dos/util/se044217.html?y http://www.vector.co.jp/soft/dos/util/se228334.html?y を使っては。 指定文字列を「含まない」行を取り出し、別のファイルに書き込むツールのようです。 ワタシ自身は使ったこと無いので、希望の性能があるかはわかりませんが。

nsakurako
質問者

お礼

早速の回答をありがとうございました。 一人での作業のため、心強い気持ちになりました! でも、上司からはフリーソフトはダメと言われているのです。 なので、出来ましたらコマンド系であると嬉しいです。 そんなことは出来ないということでしたら、その旨を上司に 報告し方針を変更してもらうようにしたいと思っています。 またもしアドバイスが御座いましたら、宜しくお願いします。

関連するQ&A