• ベストアンサー

ファイル内のある文字列以降を別ファイルに出力する方法

よろしくお願いします。 MS-DOSコマンドによるバッチで次のことを検討中です。 (find や findstr 等を使用して試行錯誤していますが、 なかなか良い案が思い浮かびません。) やりたいこと  あるファイルの内容を上から順に確認していき、  あるキーワードを発見したら、それ以降の行を全て  別のファイルへ出力する。 どうぞ、アドバイスのほど、宜しくお願い致します。 (OS: Windows Server 2003, Windows 2000 Server ,Windows XP pro)

  • nao-k
  • お礼率92% (695/752)

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

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

for /f "delims=[]" %%A in ('find /n "文字列" ^<ファイル') do set /a N=%%A-1&goto next :next more +%N% ファイル > 別ファイル

nao-k
質問者

お礼

ご回答、ありがとうございます。 非常に助かりました。実行したところうまくいきました。 区切りの「"delims=[]"」と「^<ファイル」の「^」はどういう使い方(意味)でしょうか?

その他の回答 (2)

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

^ についてはヘルプをそのまま本にしたような書籍には載ってないでしょうね。Microsoftサイトのどこかにちらとかいてあったような気がします。 この機能を知らなくても、 find /n "文字列" < ファイル >tmp.txt for /f "delims=[]" %%A in (tmp.txt) do set /a N=%%A-1&goto next で同じことが出来ます。 >区切りに「[]」を指定しているのが判りません・・・。 find /n "文字列" < ファイル名 してみるとわかると思います。

nao-k
質問者

お礼

何度もご回答、ありがとうございます。 >Microsoftサイトのどこかにちらとかいてあったような気がします 探してみましたが、見つかりませんでした。 本当に、ちらっと書いてある程度のようです。 >find /n "文字列" < ファイル名してみるとわかると思います。 試してみて、判りました。

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

delimsについては、for /? に解説があります。 ^< と ^ をつけないとリダイレクトはfor文の処理の時にリダイレクトしようとして、構文エラーになります。 ^< の ^ は「りダイレクトをちょっと待って」というような意味で、forの処理の時はリダイレクトと見なされず、find の処理の時にリダイレクトと見なされます。

nao-k
質問者

お礼

notnot様、ありがとうございます。 「^<」は、そのように使うのですね。 バッチプログラミング関連の本を読んだのですが、 (見落としたのかもしれませんが)判りませんでした。 非常に助かりました、ありがとうございます。 「delims」の意味は、区切りを指定するというのは知っているのですが、区切りに「[]」を指定しているのが判りません・・・。

関連するQ&A

  • ファイル内のある文字列以降を置換

    よろしくお願いします。 OS: Windows Server 2003, MS-DOSコマンドによるバッチで、あるテキストファイル内を検索し、 ある文字列を見つけたら別のある文字列に置換する、という ものを検討中です。 findstr と for文を使用して試行錯誤していますが、 なかなかうまい方法にたどり着きません。 以前ここで教えていただいた http://okwave.jp/qa2602345.html を応用してできないか? ということについても考えているのですが、 なかなか難しいです。 具体的に置換したい文字列というのは、 Dirコマンドの結果で出力されるドライブ文字を 例えば すべてD:\ から すべてE:\ へ変更するということです。 どうぞ、アドバイスのほど、宜しくお願い致します。

  • バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが

    バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが開けない (1)と(2)のバッチファイルを作りました。それぞれ単体で実行すると、エラーは出ません。 (1)と(2)を一緒にした(3)というバッチファイルで実行すると、FINDSTRのところで、 「ファイルを開くことができません」というエラーが出て、途中でとまってしまいます。 エラーを出さずに実行する方法は何かないでしょうか? (A.batは、CドライブにあるWord.exeを実行するだけのバッチファイルです。) どうぞよろしくお願いします。 【(3)の中身】 call A.bat >kekka.txt   ←この1行だけが(1)のバッチファイルの中身です GOTO kensaku GOTO :EOF ::文字列検索 :kensaku SET keyword=作成しました。   ←この行から下が(2)のバッチファイルの中身です FINDSTR %keyword% kensaku.txt > NUL GOTO kekka%ERRORLEVEL% GOTO :EOF :kekka0 REM 文字列あり ECHO %keyword%がありました PAUSE > nul GOTO :EOF :kekka1 REM 文字列なし ECHO %keyword%はありませんでした。 PAUSE > nul GOTO :EOF

  • *.txtファイルの最終行だけ参照して、バッチファイルを作りたい

    *.txtファイルのなかに"test"という文字をfindstrコマンド又はfindコマンドで探して、出力したいのですが、全ての行を参照して出力するのではなくて、最終行だけを参照して出力するといったバッチファイルを作成したいのですが、どうやればいいのでしょうか? どうぞよろしくお願いいたします。

  • ファイルを別フォルダへ格納するには?

    よろしくお願いします。 WindowsXPでのMS-DOSバッチについての質問です。 あるフォルダの中に多数のファイルがあります。 この多数のファイルのファイル名の中のキーワードを拾い、 AAAというキーワードを含むファイルであればAAAという フォルダにそのファイルを移動し、BBBというキーワードを 含むファイルであればBBBというフォルダにそのファイルを 移動する・・・ということを可能とするバッチは どのようにすれば作成できますか? どうぞよろしくお願いいたします。

  • テキストファイル内の任意の文字列を置換

    ※http://okwave.jp/qa2627431.html を改めさせて頂きます。 よろしくお願いします。 OS: Windows Server 2003(以下W2K3), Windows 2000 Server(以下W2K) MS-DOSコマンドによるバッチで、あるテキストファイル(.txt)内を検索し、 任意の文字列を見つけたら別の文字列に置換する、という ものを検討中です。 ★目的  1)「Dir /s /a <パス>」の結果として出力されるドライブレターを、   例えば全て「D:\」から全て「E:\」へ変更。   (あくまでも「D:\」を置換するのであって「D」のみは考慮しません。)  2) 1) の結果をFCコマンドで比較。   具体的には、W2K 上のあるディレクトリ配下と   W2K3 上のあるディレクトリ配下を比較し相違点を検出したい。 ★その他問題点  W2K と W2k3 での Dirコマンド結果の仕様に違いがあるようです。   →時刻とファイル名、<DIR>とディレクトリ名の間の半角スペース数。    他、気づいていない違いがある可能性もあります。    ※FCコマンドが半角スペース数の違いを検出するようです)  半角スペースの置換で回避を検討中です。 ★参考にしているバッチ  下記ページのsample.batを参考に検討中です。  置換対象文字列以外は何も変えずに実行してもうまく動きません。  例えば、「指定されたファイルが見つかりません」や結果として  出力されるファイル内容がドライブレターを置き換えたものになってい  なかったりします。  http://www.fpcu.jp/dosvcmd/bbs/log/cat3/cat54/2-0391.html どうぞ、アドバイスのほど、宜しくお願い致します。

  • MS-DOSのバッチファイルでアセントの付いている文字のフォルダへのコピーについて

    スペイン語版のWindowsXPを使用しています。MS-DOSのコマンドでバッチファイルを作りフォルダへファイルをコピーしようとしているのですが、アセントのついている文字のフォルダへファイルをコピーできません。コマンドプロンプトに表示はされる時にその文字だけ文字化けのような状態になってしまいます。直接MS-DOSにコマンドを打ってコピーする事はできるのですが、バッチファイルにするとうまくいきません。。。アセントとは、aeiouのアルファベットの上に " ´ "がついている文字です。もしおわかりになればご教授ください。よろしくお願い致します。

  • 【コマンドプロンプト】テキストファイル内の文字列置換

    こんにちは。 コマンドプロンプトのバッチファイルでテキストファイル内の文字列の置換を行いたいと考えております。 例えば以下のような内容があった場合、 --開始-- ABCDEFG1111 ABCDEFG ABCDEFG1111 HIJKLMN --終了-- バッチファイル処理結果として 1111 ABCDEFG 1111 HIJKLMN という結果を別ファイルに出力したいのです。 制限としては、sed,awkなどのwindows上で稼動するツールがあるようですが それらは使用できません。 どなたかご存知の方教えていただけないでしょうか よろしくお願い致します。

  • Windowsのバッチファイルでcallコマンド時にログを残す方法について

    お世話になっております。 Windowsのバッチファイルについての質問です。 Windowsのバッチファイル内で、さらにバッチファイルをcallコマンドに よって、呼び出しているのですが、その呼び出したバッチファイルの logを残したいのですが、実装方法が分かりません。 # UNIXのscriptコマンドのようなコマンドがあれば実装できると # 考えたのですが、存在していないようです。 callコマンドは、リダイレクトorパイプが使えないらしいので、 以下のような記述だとlogを出力することができません。 call test.bat > test.log ご存知の方がいらっしゃいましたら、ご教示下さい。 以上、よろしくお願いいたします。

  • WINDOWS バッチについて

    こんにちは windowsでバッチについてお聞きしたいことがあります。 あるログファイルの中の、特定の文字列だけを抜きだすというような、バッチやバッチテストのやり方を教えて頂けないでしょうか。 本当に初心者なので、困っています。 ちなみに findstrというコマンドをつかって、やりましたが処理が上手くいきませんでした。 詳しいかた、お忙しいと思いますが、宜しくお願いします。 できれば、早めにご回答頂けると嬉しいです。

  • aviutl バッチ出力に失敗したファイルがあります

    PCを再セットアップしたところ、以前は出来ていたaviutlのバッチ出力に失敗するようになりました。 (この質問http://oshiete1.goo.ne.jp/qa2662697.htmlは見ました) aviutl一式が入ったファイルはセットアップ前の物をそのまま移しています。 出力の流れは以前と同じ方法で 1.AVI出力:ビデオ圧縮(VP6、Two Pass-First Pass)、音声なしでバッチ1登録 2.ビデオ圧縮(VP6、Two Pass-Second Pass-Best Quality)、オーディオ圧縮(MPEG Layer-3、128kBit/s, 44,100Hz, Stereo)でバッチ2登録 3.バッチ1、2をバッチ出力 です。 そうしてバッチ出力をしているとバッチ2に入った所で「バッチ出力に失敗したファイルがあります」と出て出力に失敗してしまうのです。 以前と違う点は、以前はバッチ2オーディオ圧縮の設定が「Mpeg Layer-3、44100Hz, 128kbps, CBR, Stereo」だったということ。 Mpeg Layer-3に現在そのような選択肢がない(数も少ない)、音声をwav出力にすると問題なく出力できることから音声コーデックの問題ではないかと推測しています。 再セットアップ後入れたコーデックは「Fraunhofer IIS MPEG Layer-3 Codec」「DivX」「ffdshow」です。 以前は検索しまくって試行錯誤してようやくエンコできるようになったので、悔しいことに使った全てのコーデックを覚えていないのです…。 このような状況を見て「これが足りないよ」「これが原因じゃないか」等ピンと来る方がいらっしゃいましたら、どうぞ知恵を貸して頂けると幸いです。

専門家に質問してみよう