WindowsPowerShell

PowerShellのファイル・フォルダ操作完全ガイド【Get-ChildItem・Copy-Item・Remove-Item実践】

WindowsPowerShell
記事内に広告が含まれています。

PowerShellのファイル・フォルダ操作はGet-Item・Copy-Item・Move-Item・Remove-Itemなどのコマンドレットで行います。バッチファイルより直感的でエラーハンドリングも優れています。

基本的なファイル操作コマンドレット

コマンドレットエイリアス用途
Get-ChildItemls / dir / gciファイル・フォルダ一覧を取得
Get-Itemgiファイル・フォルダの情報を取得
New-Itemniファイル・フォルダを作成
Copy-Itemcp / copyコピー
Move-Itemmv / move移動・リネーム
Remove-Itemrm / del削除
Rename-Itemren名前変更
Get-Contentcat / gcファイルの内容を取得
Set-Contentscファイルに書き込む(上書き)
Add-Contentacファイルに追記
Test-Path存在確認

ファイル・フォルダ操作の実例

# フォルダ作成
New-Item -Path "C:\work\logs" -ItemType Directory -Force

# ファイル作成
New-Item -Path "C:\work\test.txt" -ItemType File

# ファイルに書き込む
Set-Content -Path "C:\work\test.txt" -Value "Hello, PowerShell!" -Encoding UTF8

# ファイルを読む
$content = Get-Content -Path "C:\work\test.txt"

# 追記
Add-Content -Path "C:\work\log.txt" -Value "$(Get-Date) 処理完了"

# コピー(フォルダごと再帰的に)
Copy-Item -Path "C:\work" -Destination "D:\backup\work" -Recurse -Force

# 移動・リネーム
Move-Item -Path "C:\work\old.txt" -Destination "C:\work\new.txt"

# 削除(確認なし)
Remove-Item -Path "C:\work\temp" -Recurse -Force

# 存在確認
if (Test-Path "C:\work\config.json") {
    Write-Host "設定ファイルが存在します"
}

ファイルのフィルタリングと一括処理

# 拡張子でフィルタ
Get-ChildItem -Path C:\logs -Filter *.log

# サブフォルダも含めて検索
Get-ChildItem -Path C:\work -Recurse -Filter *.txt

# 30日以上前のファイルを削除
$limit = (Get-Date).AddDays(-30)
Get-ChildItem -Path C:\logs -Filter *.log |
    Where-Object { $_.LastWriteTime -lt $limit } |
    Remove-Item -Force
    
# ファイルサイズでフィルタ(1MB以上)
Get-ChildItem -Path C:\work -Recurse |
    Where-Object { $_.Length -gt 1MB } |
    Select-Object Name, @{Name="SizeMB";Expression={[math]::Round($_.Length/1MB,2)}}

-Forceオプションは「確認ダイアログなしで強制実行」する便利なオプションですが、誤ったパスを指定するとデータを失います。スクリプト開発時はまずWrite-Hostで「何を削除・移動するか」を出力して確認してから、-Forceを有効にする習慣をつけることをおすすめします。

hobbyshift管理人

まとめ

  • Get-ChildItem・Copy-Item・Move-Item・Remove-Itemが基本のファイル操作コマンドレット
  • -Recurseでサブフォルダを含めた再帰処理、-Forceで確認なし強制実行
  • Where-ObjectとLastWriteTime・Lengthを組み合わせて古いファイルや大きいファイルを自動処理できる
  • Set-Content/Add-ContentでUTF8指定をすると文字化けを防げる

コメント

タイトルとURLをコピーしました