使用 PowerShell 過濾檔案和資料夾

Marion Paul Kenneth Mendoza 2023年1月30日
  1. 在 PowerShell 中使用 Get-ChildItem Cmdlet 過濾檔案
  2. Get-ChildItem 別名
  3. 在 PowerShell 中使用 Get-ChildItem Cmdlet 獲取子目錄中的所有檔案
  4. 在 PowerShell 中使用 Get-ChildItem Cmdlet 過濾具有特定條件的檔案
使用 PowerShell 過濾檔案和資料夾

在某些情況下,我們需要檢查檔案是否存在於特定位置或目錄中。雖然我們可以使用舊命令 dir,但僅匯出特定檔案是不夠的。對於這個用例,我們可以使用 Windows PowerShell 的 Get-ChildItem cmdlet。

本文將討論 PowerShell Get-ChildItem cmdlet,我們將使用它來獲取目錄中的所有專案並利用其過濾器開關引數。

Windows PowerShell Get-ChildItem cmdlet 獲取特定位置或目錄中的子項。例如,在 cmdlet 中指定的位置可以是檔案系統目錄、登錄檔或證書儲存。此外,提到的子項可以是另一個目錄、子資料夾或檔案。

Get-ChildItem -Path C:\Temp

在上述命令中,Get-ChildItem 從使用 -Path 引數指定的路徑獲取子項。

Get-ChildItem cmdlet 執行時,在 PowerShell 控制檯上顯示檔案、目錄及其 ModeLastWriteTimeLength(檔案大小)和 Name 屬性。

Mode                 LastWriteTime         Length Name                                
----                 -------------         ------ ----
d----l        18/01/2022   8:52 pm                WindowsPowerShell
d----l        20/12/2021   3:36 pm                Zoom
-a---l        30/12/2020   3:23 pm          (151) backup phrase.txt
-a---l        17/06/2021   3:13 am       (410049) CEF1750.pdf
-a---l        16/05/2020   3:32 am          (677) default.cpu1
-a---l        21/08/2019   9:06 am         (2240) Default.rdp
-a---l        26/05/2021   8:24 am        (63399) e-sig.jpg
-a---l        09/03/2020  10:48 pm          (143) fan config.sfsm
-a---l        19/09/2020  12:07 pm    (279515089) MCSA.rar

在 PowerShell 中使用 Get-ChildItem Cmdlet 過濾檔案

我們可以使用 -File 開關引數僅返回路徑或目錄內的檔案。

示例程式碼:

Get-ChildItem -Path C:\Temp -File

輸出:

Mode                 LastWriteTime         Length Name                                
----                 -------------         ------ ----
-a---l        30/12/2020   3:23 pm          (151) backup phrase.txt 
-a---l        17/06/2021   3:13 am       (410049) CEF1750.pdf
-a---l        16/05/2020   3:32 am          (677) default.cpu1
-a---l        21/08/2019   9:06 am         (2240) Default.rdp
-a---l        26/05/2021   8:24 am        (63399) e-sig.jpg
-a---l        09/03/2020  10:48 pm          (143) fan config.sfsm
-a---l        19/09/2020  12:07 pm    (279515089) MCSA.rar

Get-ChildItem 別名

Windows PowerShell 為 Get-ChildItem cmdlet 使用預設的內建別名 gci。就像下面的示例片段一樣,你可以使用別名而不是 cmdlet 來實現更快和無縫的指令碼編寫。

示例程式碼:

gci -Path C:\Temp -File

在 PowerShell 中使用 Get-ChildItem Cmdlet 獲取子目錄中的所有檔案

如果我們想獲取目錄和子目錄中的所有檔案,請使用 -Recurse 開關引數。

示例程式碼:

gci -Path C:\Temp -Recurse - Force -File
注意
-Force 引數允許 cmdlet 獲取使用者無法訪問的專案,例如系統檔案或隱藏檔案。Force 引數不會覆蓋安全限制。供應商之間的實施有所不同。

在 PowerShell 中使用 Get-ChildItem Cmdlet 過濾具有特定條件的檔案

使用 -Filter 引數,我們可以使用單個表示式過濾掉結果。 -Filter 引數不需要 -Path 引數,因為它將使用你當前的工作目錄。

示例程式碼:

gci -Filter C:\Temp\* -Filter *.txt 

我們還可以使用 -Include 開關引數,它接受多個條件,這是 -Filter 引數的一個絕佳優勢。但是,請記住 -Include 引數需要 -Path 引數出現在表示式中。

示例程式碼:

gci -Path C:\Temp\* -File -Include CEF*.pdf, *.txt 

除了接受多個條件之外,-Include 引數與正規表示式配合得很好,因此使其成為比 -Filter 引數更通用的方法。

輸出:

Mode                 LastWriteTime         Length Name                                
----                 -------------         ------ ----
-a---l        30/12/2020   3:23 pm          (151) backup phrase.txt
-a---l        17/06/2021   3:13 am       (410049) CEF1750.pdf
注意
使用 -Include 開關引數時,路徑的末尾應包含萬用字元星號 (*)。此萬用字元表示你正在查詢具有在 -Include 引數中定義的特定副檔名的所有路徑子項。
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相關文章 - PowerShell File

相關文章 - PowerShell Directory