• 締切済み

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

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

みんなの回答

  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.3

例として挙げておられる内容にもう少し補足がほしいです。 1) 入力ファイルに存在する ABCDEFG1111 を 1111 に置き換える 2) 入力ファイルのスペースで区切られた前半部分を (ABCDEFG1111でなくても) 1111 に置き換える 3) 入力ファイルのスペースで区切られた前半部分にある 文字列(ABCDEFG1111でなくても)の英字部分を削除して数字だけに置き換える どれがお望みですか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

今どきは、#1の方の言われるようにWSHを使うべきのような気がしますがあえてコマンドにこだわってみました。 edlinを利用して コマンドのファイルとして CMD.TXTを以下のように作って CMD.TXT--------------------- 1,RABCDEFG1 1 E ---------------------------- 編集したいファイルがdata.txtだとすると edlin data.txt <cmd.txt の様にすると 結果がdata.txtに得られます。 元のファイルはdata.bakのような形で保存されるので、適当にファイル名の変更などをすれば良いです。 CMD.TXTの 1,RABCDEFG1 1 は 1(一行目から),(最後まで)R(置き換える) 検索文字列CTRL+Z置き換える文字列 のようになります。CTRL+Z(制御文字)がにゅうりょくできるエディタでコマンドを作成する必要があります。 edlinは、MS-DOSコマンドでいわゆるラインエディタと言われるもので、XPにも互換性のために残されていて使用することができます。 低機能なsedのように使うことができます。

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

残念ながら、Windowsの標準コマンドラインツールで、テキスト内の文字列が編集できるものはありません。 CMD.EXEのFOR分や変数置換等を使ってかなり複雑なことを行えば、不可能ではないかもしれませんが、あまり現実的ではないと思います。 このような機能をバッチファイル的に行いたい場合は、普通はWSHで動くスクリプトを使うことになるでしょう。 少なくともWindows2000やXPであれば、標準で使えますし、cscript.exeを使うことでバッチの中から普通に呼び出せます。 参考までに、以前にWSHについて説明した回答をのせておきます。 http://okweb.jp/kotaeru.php3?q=244284

関連するQ&A

  • sedコマンドを使用して、文字の置換を行いのですが助けてください。

    sedコマンドを使用して、文字の置換を行いのですが助けてください。 sedコマンドやawkコマンドなどを使って、aliasesファイルの置換を行いたいのですが、 うまくいかないので教えていただけないでしょうか? 知りたいのは、次のような置換を一括で行うことのできるコマンドです。 ■置換前のファイル ================= AAAA:  :include:/file/name BBBB:  :include:/file/name CCCC:  :include:/file/name ================= ■置換後のファイル(希望する置換結果) ※1フィールド目の任意の文字列をメールアドレスのローカルパートとして利用したい ================= AAAA:  AAAA@example.com BBBB:  BBBB@example.com CCCC:  CCCC@example.com ================= 以上です。

  • コマンドプロンプトのバッチファイルでテキストファイル内の文字列を抜き出したい

    コマンドプロンプトのバッチファイルでテキストファイル内の文字列から何文字か抜き出すにはどうすればよいですか? たとえば,abcde****** のようにその行の最後から6文字目までとか。

  • コマンドプロンプトでファイル名に含まれるスペースを別の文字に置換したい

    コマンドプロンプトでファイル名に含まれるスペースを別の文字に置換したい BAT実行や、BATにドロップする程度の操作でファイル名置換したいと思っています。 たとえば、「abcTEST123.txt」というファイルを下記のバッチにドロップすると、 「abctest123.txt」と言うファイル名に置換されます。 for %%A in (*TEST*.txt) do call :sub %%A :sub set A=%1 ren %A% %A:TEST=test% しかし「TEST」をスペースにしてもファイル名の置換はできません。 コマンドプロンプトではスペースは扱えないのでしょうか。 解決策がありましたらご教授願います。

  • ファイルの内の文字列の置換について

    質問なんですが、sedコマンドを使用して文字の置換をやってみたんですが、同じファイルに置換した情報を上書きすることは可能でしょうか? 今試した例としては sed -e 's/aaa/bbb/g' test > test と試してみたんですがファイルの内容がなくなってしまっていました。 同じファイルに置換内容を入れることは可能なのでしょうか? 他の方法がある場合は教えてください。 よろしくお願いします。

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

    ※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 どうぞ、アドバイスのほど、宜しくお願い致します。

  • コマンドプロンプトのコマンドを使ってバッチファイルを作ってみたいのですが

    プログラミングについてはコマンドプロンプトでバッチファイル(ログファイルの作成など)を何度か作成したことのあるだけの初心者なのですが、 バッチファイルは簡単で幅広い実用性があるように感じています。  コマンドプロンプトを使ったバッチファイルでどのようなことができるのか実用例が載っている本を探しています。  これは役に立つ!という本がありましたら是非教えていただけませんか?

  • bashでテキストファイルの編集について

    bashでファイルの1行目の5バイト目にある文字だけを置換させたく sed、awkコマンドでいろいろやってみたのですが、 知識不足で全行の5バイト目が置換されたりして なかなかうまくいきません。 どなたかご回答お願いします。

  • UNIX コマンドで 複数ファイルの文字列置換の方法

    UNIX初心者です。 UNIXのコマンドで複数のファイルの中身を同時に置換できないでしょうか? 自分で探しては見たのですが、"sed"しか見つかりません。 sed 's/aaa/AAA/g' <file1> file2 という方法では、ひとつずつなので、時間がかかってしまいます。 UNIXコマンドには、ありませんでしょうか。 また、無ければどのような知識が必要でしょうか。 私の知識が少ない為、内容が判りにくいとは思います。 すみませんが、よろしくお願いします。

  • バッチファイルで文字列を順番問わずマッチさせたい

    バッチファイルで、2個以上の文字列を順番問わずマッチさせたいと考えています。 例えば、 「111 222 333 444 555 666 777」 という内容のテキストファイルがあったとして、 sedコマンドを使って 「222」と「444」と「666」が この順番で含まれている行を置換したい場合、 sed -e "s/.*222.*444.*666.*/置換後の文字列/" in.txt > out.txt とすれば、問題なく置換されると思います。 しかし、上記の例では、 「777 666 555 444 333 222 111」 という内容のテキストファイルは置換されません。 文字列の順番を問わず、 「222」と「444」と「666」が含まれている行ならば、 その行を置換する、といった事は出来ないでしょうか。 sedコマンド以外でも構いませんので、何かいい方法をご存知の方がおられましたらお教え頂けないでしょうか。

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

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