• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:windows7でファイル内の一連の文字列を置換)

Windows7でファイル内の文字列を置換する方法

skp026の回答

  • skp026
  • ベストアンサー率45% (1011/2238)
回答No.2

bat内で、powershellを使うと実現可能です。 それも正規表現の検索置き換えできますので、 今回のように途中にスペースが入っていても検索できます。 以下はbatの例です。 =====ここから===== powershell Set-ExecutionPolicy RemoteSigned powershell .¥Replace-Content.ps1 -file ".¥Sample.txt" -rep1 "123456789¥ssample1" -rep2 "123456789¥ssample2" powershell .¥Replace-Content.ps1 -file ".¥Sample.txt" -rep1 "999999999¥ssample2" -rep2 "999999999¥ssample1" powershell Set-ExecutionPolicy Default =====ここまで===== ※ 文字数制限のため改行されています。 本来はpowershellを頭にして4行です。 ※ 実行には管理者権限が必要です。 例えばコマンドプロンプトで実行の場合はプロンプト開く時に 管理者権限を与えます。 ※ ここのサイトの都合上(半角の¥は化ける)、 ¥記号を半角ではなくわざと全角にしています。 実際には半角の¥に置き換える必要があります。 ※ ¥sが半角のスペースです。(これも本来は半角) スペースのまま引数にすると、.ps1でうまく引数が取得できません。 ※ .batと.ps1と.txtは、同一フォルダにあるものとしています。 以下はReplace-Content.ps1の中身 =====ここから===== Param([string]$filepath, [string]$rep1, [string]$rep2) $rep2 = $rep2 -replace "¥¥s"," " $file_contents = $(Get-Content $filepath) -replace $rep1, $rep2 Set-Content $filepath $file_contents =====ここまで===== ※ 分かりにくくなるので、 エラー処理(例外処理)は、あえて入れていません。 また置き換え用の文字列の¥sは、そのままだとスペースに ならなかったため、スペースに直しています。 もっとスマートな方法もあるかもしれないですが、 とりあえずの例としてご参考ください。 ※ powershellは5.0で試しています。 powershellはMicrosoft純正のもので無料です。 インストールなどは以下が参考になると思います。 http://qiita.com/busonx/items/2ebca42866833516c772 ※ たまたまですが私は最近、bat内で文字列置き換えが必要でした。 フリーソフトのコマンドもありましたが、いずれもいまひとつでした。 しかし、powershellの置き換えでは正規表現が使えます。 そして正規表現では行末や行頭のような指定の仕方もできます。 powershellも正規表現も、どちらも慣れておくと便利だと思います。

cabhana
質問者

お礼

SKP026様、 早々のご回答ありがとうございました、早々に社内で"PowerShell"を調査いたしましたところ、社内では使用できないソフトウェアとして登録されておりました。 丁寧にご説明して頂き、解説もして頂いていたのでぜひつかわさせて頂きたかったのですが、大変申し訳ありません。ありがとうございました。

cabhana
質問者

補足

SKP026様、 早々のご回答ありがとうございました、早々に社内で"PowerShell"を調査いたしましたところ、社内では使用できないソフトウェアとして登録されておりました。 丁寧にご説明して頂き、解説もして頂いていたのでぜひつかわさせて頂きたかったのですが、大変申し訳ありません。ありがとうございました。

関連するQ&A

  • バッチファイルでテキストファイル内の特定の文字列をコンピュータ名に置換

    バッチファイルでテキストファイル内の特定の文字列をコンピュータ名に置換したい バッチファイルの記述方法について教えて下さい。 テキストファイル内に特定の文字列が存在していた場合、その文字列をバッチファイルを実行するPCのコンピュータ名で置換するにはどのように記述したら良いでしょうか。 なおPCはWindowsXPを使用しています。

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

    バッチファイルで、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コマンド以外でも構いませんので、何かいい方法をご存知の方がおられましたらお教え頂けないでしょうか。

  • ファイルを開かずにテキストファイルの文字列置換

    続けての投稿で申し訳ないのですが、複数のフォルダ中のテキストファイルすべての中身を検索してある文字列を置換する方法を教えてください。 行いたい作業例ですが、 1)ABC- → ABC-   ある特定の半角文字列+"-"を全角に変換 2)2ー → 2-      ある特定の文字列+"ー(全角の長音)"を文字列+"-(全角のマイナス)"に 3)192.168.0.?? → ABC0?? にしたいです。 フォルダは複数あるため、一階層上から作業できる方がいいです。 AAAというフォルダ下に先のABCというフォルダ以外にDEFやGHIといったフォルダがあり、その下に001-00.txtや001-01.txtというフォルダがあるということです。 よろしくお願いします。

  • cshの文字列置換

    ヤマトです。 cshでファイル文字列を置換したいのですが、分かりません。 環境はRed Had Linux7.2です。 hoge1.txt の中の 'HIDUKE' という文字列を今日の日付に置換し、 hoge2.txt に出力するようなシェルを作りましたが、正常に動作しません。 ====hoge1.txt(置換前)==== 今日はHIDUKEです。 ====hoge1.txt(置換前)==== 今日は030814です。 ====SAMPLE.sh(一部抜粋)==== set TODAY = `date +"%y%m%d"` sed 's/HIDUKE/$TODAY/g' < hoge1.txt > hoge2.txt 以上のようなシェルを作りました。 結果として、hoge2.txtには出力されるのですが、 「今日は$TODAYです」 となってしまいます。 変数の値を置換するにはどのようにしたら良いのでしょうか? 教えて頂けると有り難く思います。宜しくお願いします。

  • ファイル内の文字列を置換

    掲示板利用させていただきます。 現在、ファイル内の特定の文字列を置換し、 保存する方法を探しています。 できればスクリプト言語を利用したいと考えています。 sedコマンドを使用して文字列置換を行ったのですが 置換前と置換後のファイルで 文字コードと改行コードが変わってしまうのでダメでした; 「ファイル内の特定の文字列を任意の文字列に置換し、置換前と置換後で改行コードと文字コードを変えない方法」 をご存知の方、ご教示ください。 bash,perl,javaのどれでも結構です。 よろしくおねがいします。

  • ファイル名からテキスト内文字列の置換

    フォルダ内に tokyo.txt、nagoya.txt、osaka.txt… といったファイル名のテキストファイルがあり そのテキストファイルの中に 地名リンクという文字列があります。 この地名リンクという文字列を各々のファイル名 tokyo.txt、nagoya.txt、osaka.txt…(できれば.txtなしのtokyo,nagoya,osaka) に一括置換したいのですが、何かいい方法はありませんか。

  • エクセル 置換後の文字列について

    エクセル2003です 置換後の文字列について質問させてください 特定のセルに文字を入力し 例 C100に(9月)等 検索と置換にて 置換後の文字列を C100のテキストに 置換したいのですが 入力時にC100を選択する方法がわかりません  よろしくお願い致します

  • VBSで文字列の置換

    VBSまったくの初心者で、「そんなもんWebで調べろ」とお叱りを受けるのを承知でお聞きします。 C:¥置換¥あああ.txt のテキストファイル内にある文字列"ABC"を"DEF"に置換するVBSはどのように記述すればよいでしょうか?。 よろしくお願いいたします。

  • ディレクトリ内の複数ファイルの中から特定の文字列を置換したい

    ディレクトリ内の複数ファイルの中から特定の文字列を置換したい 要は、あるフォルダ内のテキストファイルに含まれる 123を987にしたいということなんですが。 sedは使えなかったんで、 perl -p -i -e 's/123/987/' *.txt としたらできました。 しかし、 perl -p -i -e 's/$rh, $rh1/$rh2, $rh2/' *.cgi のようにスペースを含むとどうもうまくいきません。 教えてください。お願いします。

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

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