2014年2月28日

【PowerShell】2つのファイルを比較する



よく、2つのファイルを比較したい、特にソースコードで変更箇所を探し出したいといったことがあると思いますが、そのようなときはCompare-Objectを使います。


Compare-Object -ReferenceObject $(Get-Content C:\work\src1\Program.cs) -DifferenceObject $(Get-Content C:\work\src2\Program.cs)

この例では、2つのファイルC:\work\src1\Program.csとC:\work\src2\Program.csの比較を行っています。


-ReferenceObject は、比較の対象となるオブジェクトを示しています。

-DifferenceObject は、Reference オブジェクトと比較するオブジェクトを指定します。

$()はそれぞれGet-Contentで取得したオブジェクトが格納された変数?になるのだと思います。
すみません勉強不足でちょっと表現があいまいなのですが、おそらく変数だと思います。


それで結果は次のようになります。
この場合、両方のファイルには含まれていないが、どちらか一方のファイルに含まれている行のみを表示します。
つまり変更点だけ表示されます。

2014年2月27日

【PowerShell】サブフォルダのファイルも含めて文字列を検索する



指定した文字列を含んだファイルを探すとき、たいていの場合サブフォルダも含んだ状態で検索すると思うのですが、そういった場合は次のように行います。


Get-ChildItem . -include *.txt -Recurse -Force | Select-String "たぬき" -Encoding default


はじめの

Get-ChildItem . -include *.txt -Recurse

は、現在のディレクトリとそのサブディレクトリ内にある.txtファイルを全て取得しています。

ドット (.) は現在のディレクトリを表しています。
Includeはファイル名の拡張子を指定しています。
Recurseは再帰的にオブジェクトを取得することを意味します。
また、Forceを付けることにより隠しファイルも取得されます。


そして、取得したオブジェクトをパイプラインでSelect-Stringに渡しています。

うしろに付いている -Encoding defaultは日本語(S-JIS)を扱う場合のパラメータです。






<関連記事>
【PowerShell】ファイル検索
【PowerShell】ファイルから文字列を検索する
【PowerShell】2つのファイルを比較する
【PowerShell】ファイルを読み込む
【PowerShell】ファイル作成


2014年2月26日

【PowerShell】ファイルから文字列を検索する



ファイルに含まれる文字列を検索する、いわゆるgrep機能を行うにはSelect-Stringを使います。


構文は以下の通りです。
Select-String -Pattern [検索したい文字列] -Path [検索するファイル]

または、

Select-String [検索したい文字列] [検索するファイル]

PS C:\work> Select-String "hello" .\*.*



上の例では、カレントディレクトリのワイルドカード「*.*」のファイルの中から「hello」という文字が含まれているファイルを探しています。

ちなみに日本語を検索する場合はちょっと注意が必要です。

PS C:\work> Select-String "たぬき" .\*.* -Encoding default



文字コードがS-JISで作成されたファイルを検索する場合は、うしろに-Encoding defaultを付けてください。

UTF8の場合は、-Encoding UTF8と指定してください。


<関連記事>
【PowerShell】サブフォルダのファイルも含めて文字列を検索する
【PowerShell】ファイル検索
【PowerShell】2つのファイルを比較する
【PowerShell】ファイルを読み込む
【PowerShell】ファイル作成


2014年2月25日

【PowerShell】ファイル検索



PowerShellでファイルを検索するには、Get-ChildItemを使います。


基本構文は次の通りです。
Get-ChildItem [ファイル名]

PS C:\work> Get-ChildItem "*.jpg"



この例では、C:\data\tmpでjpg拡張子の付くファイルを検索しています。

ちなみにこの方法だと、そのフォルダ内しか検索してくれません。

サブフォルダも検索したい場合は、-Recurseをつけます。

PS C:\work> Get-ChildItem C:\data\tmp "*.jpg" -Recurse


ただここで注意しなければいけないのは、検索を開始する親フォルダを指定しないといけないことです。
上の例では、C:\data\tmpの部分です。


<関連記事>
【PowerShell】ファイルから文字列を検索する
【PowerShell】ファイルをコピーする
【PowerShell】ファイルを削除
【PowerShell】ファイルを読み込む
【PowerShell】ファイル作成


2014年2月24日

【PowerShell】ファイルに追記する


PowerShellでファイルに追記するには、Add-Contentを使います。

たとえば以下の内容のファイルがあったとして、ここに「えんがわ」を追加したいとします。

その場合、次のようにします。

PS C:\work> Add-Content -Path C:\work\寿司ネタ.txt -Value "えんがわ"


このように一番下に「えんがわ」が追加されました。


2014年2月21日

【PowerShell】ファイルに書き込み


ファイルに書き込むには、Set-Contentを使います。


PS C:\work> Set-Content -Path C:\work\test.txt -Value "やっほー"

上の例では、C:\work\test.txtというファイルに「やっほー」と書き込んでいます。

ちなみに-Pathと-Valueは省略できます。

また、-Pathで指定したファイルが存在しない場合は、自動で作成してくれます。


2014年2月20日

【PowerShell】ファイル作成



PowerShellでファイルを作成するには、New-Itemを使います。




PS C:\work> New-Item -Path [ファイル名] -Value [ファイルの内容] -Type file

ちなみに-Pathと-Valueは省略できます。

-Typeはfile以外にdirectoryもあって、directoryを指定するとフォルダが作成されます。



-Valueに指定すると、内容を書き込んでファイルを作成してくれます。

PS C:\work> New-Item -Path C:\work\Hello.txt -Value "Hello!" -Type file

この例では、"Hello!"と書き込んだC:\work\Hello.txtファイルを作成しています。


<関連記事>
【PowerShell】ファイルをコピーする
【PowerShell】ファイルの移動
【PowerShell】ファイルを削除
【PowerShell】ファイルを読み込む
【PowerShell】ファイル検索