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

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

このQ&Aのポイント
  • Windows7を使用しており、テキストファイル内の特定の文字列の変換をしたく、簡単なバッチプログラムを作成したいです。
  • 変換したい文字列は SAMPLE.TXT ファイル内にあり、置換後には特定の文字列を別の文字列に置換したいです。
  • 具体的には、123456 SAMP1 と 999999 SAMP2 をそれぞれ別の文字列に置換したいです。

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

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

powershellにはいくつかのバージョンがあります。 Windows7に標準装備されてるものは2.0のようですが、 そのバージョンか5.0にされているかでお助け内容はかわります。 私は、 batをそのまま実行するのではなく、コマンドプロンプトを 管理者権限で開いたあと、batのあるフォルダに移動し その上で実行しました、その影響が出ているかもしれないです。 フォルダ移動(チェンジディレクトリ)は以下を参考ください。 https://www.k-tanaka.net/cmd/cd.php エラーなどがあれば、それも表示されますので、 記述ミスなどが確認できると思います。 このサイトに半角¥を使うとクエスチョンマークに変換されてしまいます。 そのため、お伝えするために全角¥を使いました。 使用する¥記号は全て半角になおしてください。 また表示の設定やバージョンなどの影響で、半角¥が 半角\(逆スラッシュ)で表示される場合もあります。 " "と同じ意味をもつのが"¥s"です。(本来は¥は半角。sも半角) この2文字が合わさり、powershellの正規表現の 半角スペースの意味になります。 他にも意味のある組み合わせがあります。 以下を参考ください。 http://mtgpowershell.blogspot.jp/2010/11/blog-post_18.html ※ 前回ご案内しましたサンプルは、 batからpowershelを呼び出し、正規表現の置き換えをするものです。 たまたま私は似たようなことを試行錯誤した直後でした。 もしかすると、batやpowershellの基礎的なことを ご案内すべきなのかもしれないですが、全てのご案内は 困難と思っています。 複数を組み合わせたものが上手く動作しないときは、 よりシンプルになおして試すと良いです。 今回でしたら、powershellのみで試してみるのもひとつの方法です。

cabhana
質問者

お礼

skp026様、 いつも、ご丁寧なご回答、ありがとうございました。 おかげさまで、目的を達する事ができました、素人の私にここまで辛抱強くご指導いただけました事に感謝致します。

その他の回答 (3)

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

すみません。ANo.2で回答したものです。 忘れていたことを追記します。 PowerShellは、Windows7から標準で組み込まれています。 その際のバージョンは2.0です。 古いバージョンでも同じ記述ができるかは試していません。 とはいっても基本的なものなので、 エラーが出ても修正は可能と思います。 でも5.0で修正や改善がされてますからおすすめです。

cabhana
質問者

お礼

skp026様、 ありがとうございました。 画像を添付致しました、画像は見られますでしょうか?下記の様に理解してバッチファイルとPOWERSHLLのファイルと変換対象ファイルを同じディレクトリーに入れて、バッチファイルは右クリックで"管理者として実行"しましたが変換されませんでした。 また、全角の"¥"と"¥s"の取り扱いが解らず、半角の円マークにしたり半角のスペースにしたりしましたがだめでした、何か間違いはあるのでしょうか? "¥" ---> "半角の¥" とか" " "¥s"---> "半角の¥" "" ちなみに、社内PCにPOWERSHELLは導入済みでした。

cabhana
質問者

補足

skp026様、 ありがとうございました。 画像を添付致しました、画像は見られますでしょうか?下記の様に理解してバッチファイルとPOWERSHLLのファイルと変換対象ファイルを同じディレクトリーに入れて、バッチファイルは右クリックで"管理者として実行"しましたが変換されませんでした。 また、全角の"¥"と"¥s"の取り扱いが解らず、半角の円マークにしたり半角のスペースにしたりしましたがだめでした、何か間違いはあるのでしょうか? "¥" ---> "半角の¥" とか" " "¥s"---> "半角の¥" "" ちなみに、社内PCにPOWERSHELLは導入済みでした。

  • skp026
  • ベストアンサー率45% (1010/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"を調査いたしましたところ、社内では使用できないソフトウェアとして登録されておりました。 丁寧にご説明して頂き、解説もして頂いていたのでぜひつかわさせて頂きたかったのですが、大変申し訳ありません。ありがとうございました。

  • chachaboxx
  • ベストアンサー率23% (412/1777)
回答No.1

バッチぢゃないとダメなのでしょうか? フリーウェアやWSHならググればすぐ出てきますが。。。

cabhana
質問者

お礼

chachaboxx様、 ご回答ありがとうございます、はい、フリーウェアではあるかもしれません、しかし、社内で使用したく、社内でのフリーウェアの使用は禁止されている為にバッチで作成できればと思い投稿させて頂きました。 ちなみに、ネットにある、いろいろなサンプルのバッチを試しましたが、 SAMPLE1 -> SAMPLE2 の変換は可能ですが、123456 SAMPLE1 -> 123456 SAMPLE2のような単語では無く空白を含んだ単語を2個以上含んだ一連の文字列の返還ができなくて悩んでおります。

cabhana
質問者

補足

chachaboxx様、 ご回答ありがとうございます、はい、フリーウェアではあるかもしれません、しかし、社内で使用したく、社内でのフリーウェアの使用は禁止されている為にバッチで作成できればと思い投稿させて頂きました。 ちなみに、ネットにある、いろいろなサンプルのバッチを試しましたが、 SAMPLE1 -> SAMPLE2 の変換は可能ですが、123456 SAMPLE1 -> 123456 SAMPLE2のような単語では無く空白を含んだ単語を2個以上含んだ一連の文字列の返還ができなくて悩んでおります。

関連するQ&A