Windows 7およびWindows Server 2008 R2以降は、スクリプティング環境として「Windows PowerShell」も標準で利用できるようになりました。
Windows PowerShellを使えば、UNIXやLinuxユーザーがsedやtr、perlを使いこなすのと同じように、簡単なコマンドラインでテキストファイルの文字列を置換できます。例えば、テキストファイルの改行コードをCR+LFに一括置換するには、Windows PowerShellで次のコマンドラインを実行します(画面3)。
$targetpath = "ファイルのパス" (Get-Content $targetpath) -Join "`r`n" | Set-Content $targetpath
このコマンドラインでは「Get-Content」コマンドレット(gc、cat、typeの省略形も使用可)でテキストファイルを文字列配列に読み込み、文字列配列(配列の各要素はテキストファイルの各行)をCR+LF(`r`n)で結合して、その結果を同じファイルパスに書き出しています。ファイルのパスを2行目のコマンドラインに直接記述すれば、1行だけで変換できるようになります。
反対に、CR+LFの改行コードをLFに変換するには、次のコマンドラインを実行します(画面4)。
(Get-Content $targetpath) -Join "`n" | Set-Content $targetpath
テキストファイルの改行コードの変換は、次のように記述することもできます。
(Get-Content $targetpath -raw).Replace("`n","`r`n")|Set-Content $targetpath
これは、改行コードを含む全てを読み込み、LF(`n)をCR+LF(`r`n)に置換して、その結果を同じファイルパスに書き出します。この方法を知っていれば、改行コード以外の任意の文字列の置換にも応用することができます。
ただし、この方法で改行コードを置換する場合は、置換前のテキストファイルの改行コードが既にCR+LFであると、CR+CR+LFに置換されてしまうことに注意してください。次のように、LFからCR+LFへの置換した後に、CR+CRをCRに置換すると確実です。
(Get-Content $targetpath -raw).Replace("`n","`r`n")|Set-Content $targetpath (Get-Content $targetpath -raw).Replace("`r`r","`r")|Set-Content $targetpath
実は、テキストファイルの改行コードをCR+LFに変換するだけなら、もっと簡単な方法があります。Get-Contentコマンドレットの標準出力への出力結果を、別のファイルにリダイレクトしてあげれば、それだけで変換できるのです(画面5)。
UNIXやLinuxでは、ファイル内容の比較に「diff」コマンドを使えますが、Windows PowerShellでもdiffを使うことができます。とはいっても、Windows PowerShellのdiffは、Compare-Objectの省略形です。次のようなコマンドラインを実行すれば、2つのテキストファイルの内容の違いを比較することができます。
Compare-Object (Get-Content "ファイル1のパス") (Get-Content "ファイル2のパス")
または
diff (Get-Content "ファイル1のパス") (Get-Content "ファイル2のパス")
メモ帳はCR+LFしか改行コードとして扱ってくれませんが、Windows向けのテキストエディタやツールにはLFを改行コードとして扱ってくれるものがたくさんあります。例えば、Windowsに付属する「Windows PowerShell ISE」もその1つです。
素早く起動できるメモ帳は、UNIXやLinuxにおける「vi」や「vim」のような存在です。メモ帳が改行コードLFにも対応してくれるとうれしいのですが、Windowsのバージョンによってメモ帳の機能が違うというのもよろしくないと思います。
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.