技術文章 · IT 指令工具箱

PowerShell 檔案指令:搜尋、複製、CSV、ZIP 與 SHA-256

整理 Get-ChildItem、Copy-Item、Move-Item、Select-String、Import-Csv、Compress-Archive、Expand-Archive、Get-FileHash 常用範例。

作者 Steve Chen · 發布  · 約 7 分鐘閱讀

IT 指令工具箱 — 廷皓技術專欄插圖

PowerShell 的檔案操作可以把搜尋結果直接交給下一個步驟,但也因此容易一次命中很多檔案。先列出、計數與抽樣,再做 Move、Rename 或 Remove。

22 組範例Windows PowerShell 5.1PowerShell 7查核日期:2026-08-11
動手前:遞迴移動、覆蓋與刪除前使用 -WhatIf(若該 cmdlet 支援),並把目標縮到明確資料夾。雜湊只能驗完整性,不能證明來源可信。

列出、搜尋與統計

列出目前資料夾PowerShell

Get-ChildItem

預設不顯示隱藏項目。

包含隱藏項目PowerShell

Get-ChildItem -Force

仍受 ACL 權限限制。

遞迴找副檔名PowerShell

Get-ChildItem C:\Logs -Recurse -File -Filter *.log

-Filter 通常比先列全部再 Where-Object 快。

找 7 天內修改檔案PowerShell

Get-ChildItem C:\Data -Recurse -File | Where-Object LastWriteTime -ge (Get-Date).AddDays(-7)

大量目錄可能較慢,先縮小路徑。

依大小排序PowerShell

Get-ChildItem C:\Data -Recurse -File | Sort-Object Length -Descending | Select-Object -First 20 FullName, Length

Length 是 bytes,可再轉 MB。

統計資料夾總大小PowerShell

Get-ChildItem C:\Data -Recurse -File | Measure-Object Length -Sum

權限拒絕或 junction 可能影響結果。

搜尋檔案內容PowerShell

Select-String -Path C:\Logs\*.log -Pattern 'timeout|refused' -CaseSensitive:$false

Pattern 預設是 regex。

遞迴搜尋文字PowerShell

Get-ChildItem C:\Logs -Recurse -File -Filter *.log | Select-String -Pattern 'ERROR'

先限制檔案類型,避免掃到二進位檔。

複製、移動與重新命名

複製單一檔案PowerShell

Copy-Item C:\Data\report.csv D:\Backup\report.csv

目的已存在時確認覆蓋行為。

複製整個資料夾PowerShell

Copy-Item C:\Data D:\Backup -Recurse

大量或可續傳需求優先用 Robocopy。

移動前預演PowerShell

Move-Item C:\Inbox\*.csv C:\Archive -WhatIf

確認命中清單後再移除 -WhatIf。

批次重新命名前預演PowerShell

Get-ChildItem C:\Photos -File | Rename-Item -NewName { $_.Name -replace ' ', '_' } -WhatIf

先處理重名與特殊字元。

建立資料夾PowerShell

New-Item -ItemType Directory -Path C:\Data\Archive -Force

-Force 在已存在時不報錯,但不會清空內容。

建立文字檔PowerShell

Set-Content -Path C:\Temp\note.txt -Value '維護完成' -Encoding utf8

Set-Content 會覆寫;追加要用 Add-Content。

追加一行紀錄PowerShell

Add-Content -Path C:\Logs\ops.log -Value "$(Get-Date -Format s) maintenance completed"

log 需要輪替與權限保護。

CSV、ZIP 與雜湊

讀取 CSVPowerShell

Import-Csv .\devices.csv | Select-Object Name, IP, Model

CSV 欄名需與 Select-Object 一致。

匯出 UTF-8 CSVPowerShell

Get-Process | Select-Object Name, Id, CPU | Export-Csv .\processes.csv -NoTypeInformation -Encoding utf8

不同 PowerShell 版本的預設 encoding 不同,明確指定較穩。

建立 ZIPPowerShell

Compress-Archive -Path C:\Data\Reports\* -DestinationPath C:\Backup\reports.zip

既有 zip 的更新與覆蓋行為要先查說明。

解開 ZIPPowerShell

Expand-Archive -Path C:\Downloads\package.zip -DestinationPath C:\Temp\package

先在隔離資料夾解壓,檢查內容與路徑。

計算 SHA-256PowerShell

Get-FileHash C:\Downloads\installer.exe -Algorithm SHA256

與廠商 HTTPS 官網或簽章提供的值比對。

批次計算 SHA-256PowerShell

Get-ChildItem C:\Downloads -File | Get-FileHash -Algorithm SHA256 | Export-Csv C:\Downloads\sha256.csv -NoTypeInformation

清單可用於後續完整性稽核。

比較兩個雜湊PowerShell

(Get-FileHash C:\A\file.iso).Hash -eq (Get-FileHash D:\B\file.iso).Hash

True 代表內容一致,不代表檔案安全。

怎麼確認有做對

  • 操作前先輸出命中數量與前幾筆路徑。
  • 複製後比對筆數、大小與抽樣 SHA-256。
  • 壓縮檔在臨時資料夾試解,再交付或部署。

常見錯誤

  • 大量操作沒有 -WhatIf 或清單審核。
  • Set-Content 覆蓋掉原檔。
  • 把 ZIP 當成真正備份而沒有異地與版本。
  • 只比檔名或大小,不驗內容。

版本與官方文件

參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。

聯絡廷皓討論 看更多文章