Cmdlet ファイルシステム操作

ファイルシステム操作は、PowerShell で最も一般的で実用的なタスクの1つです。

ファイルの作成、コピー、移動、削除から、ファイル属性の取得、ディレクトリ構造の一括処理まで、PowerShell はこれらの操作を実行するための、簡潔で強力な多数の Cmdlet を提供しています。


一、ディレクトリの内容を表示:Get-ChildItem

Get-ChildItem

これは PowerShell でディレクトリの内容を表示するコマンドです(ls 或 dir)に相当します。デフォルトでは、現在のディレクトリ内のすべてのファイルとサブディレクトリを一覧表示します。

パスパラメータを使用することもできます:

Get-ChildItem -Path C:\Test

すべてのサブディレクトリを表示(再帰):

Get-ChildItem -Path C:\Test -Recurse

ファイルタイプでフィルタリング:

Get-ChildItem -Path C:\Test -Filter *.txt

二、ファイルとディレクトリの作成:New-Item

新しいディレクトリを作成:

New-Item -Path "C:\Demo" -ItemType Directory

新しいファイルを作成:

New-Item -Path "C:\Demo\example.txt" -ItemType File

ヒント:パス内の親ディレクトリが存在しない場合、エラーになります。事前に手動またはスクリプトで上位ディレクトリを作成する必要があります。


三、コピーと移動:Copy-ItemとMove-Item

ファイルをコピー:

Copy-Item -Path "C:\Demo\example.txt" -Destination "D:\Backup"

フォルダ全体をコピー(内容を含む):

Copy-Item -Path "C:\Demo" -Destination "D:\Backup" -Recurse

ファイルを移動:

Move-Item -Path "C:\Demo\example.txt" -Destination "C:\Demo2"

四、ファイルとディレクトリの削除:Remove-Item

ファイルを削除:

Remove-Item -Path "C:\Demo\example.txt"

フォルダとその内容を削除:

Remove-Item -Path "C:\Demo" -Recurse -Force

説明:

  • -Recurse:ディレクトリ内のすべての内容を削除します
  • -Force:非表示ファイルや読み取り専用ファイルを強制削除します

五、ファイルの読み取りと書き込み:Get-Content / Set-Content / Add-Content

ファイルの内容を読み取り:

Get-Content -Path "C:\Demo\example.txt"

内容を書き込み(上書き):

Set-Content -Path "C:\Demo\example.txt" -Value "Hello PowerShell"

内容を追記:

Add-Content -Path "C:\Demo\example.txt" -Value "Another line"

六、ファイルの名前変更と存在確認

ファイル名を変更:

Rename-Item -Path "C:\Demo\example.txt" -NewName "renamed.txt"

ファイルが存在するかどうかを確認:

Test-Path -Path "C:\Demo\renamed.txt"

存在する場合は True を返し、存在しない場合は False を返します。


七、ファイル属性の取得:Get-Item

$item = Get-Item -Path "C:\Demo\renamed.txt"
$item.Length         # 文件大小(字节)
$item.CreationTime   # 创建时间
$item.Extension      # 扩展名

注意:返されるのはSystem.IO.FileInfo型オブジェクトです。オブジェクトのプロパティをさらに使用できます。


八、組み合わせ操作の例:ファイルの一括処理

ディレクトリ内のすべてを一括表示.logファイルサイズの合計:

Get-ChildItem -Path "C:\Logs" -Filter *.log | Measure-Object -Property Length -Sum

出力結果の例:

Count    : 15
Sum      : 1289345
Property : Length

すべての .txt ファイルの内容を新しいファイルに追記:

Get-ChildItem -Path "C:\TextFiles" -Filter *.txt | ForEach-Object {
    Get-Content $_.FullName | Add-Content -Path "C:\AllText.txt"
}

九、注意事項とよくある落とし穴

問題 説明
パスにスペースが含まれる 引用符を使用"パス文字列全体を囲みます
ディレクトリとファイルを区別する New-Itemを必ず指定する-ItemType File 或 Directory
ファイルが存在しない場合に操作がエラーになる を使用してTest-Path確認してから処理する
削除コマンドには注意が必要 Remove-Itemを使用する際は-Recurse慎重に、誤削除を避ける

十、まとめと提案

PowerShell はファイルシステム操作において非常に強力で、以下の利点があります:

  • コマンドが直感的で統一されており、学習コストが低い
  • オブジェクト操作をサポートし、他のコマンドと組み合わせられる
  • 一括タスクや自動化スクリプトに使用できる

学習方法の提案:

  1. 一時ディレクトリで様々なコマンドを繰り返し練習する
  2. 5つの主要コマンドをしっかり習得する:New-Item、Remove-Item、Copy-Item、Get-Content、Set-Content
  3. コマンドをスクリプトにまとめて、複数のファイルを一括処理してみる
その他の拡張