iT邦幫忙

1

PowerShell dir 列出檔案

  • 分享至 

  • xImage
  •  

測試於PowerShell 5.1

dir -Path

dir -Path 檔名、資料夾名

dir -Path 檔名 → 檔案
dir -Path 資料夾名 → 進入資料夾之後,列出裡面的東西(全部)

檔名資料夾名的差別

  • 尋找的範圍
  • 尋找的目標

如果要列出資料夾本身,使用Get-Item -Path 資料夾名

-Recurse 在各層尋找
dir -Path 檔名 -Recurse → 各層符合檔名的檔案、資料夾
dir -Path 資料夾名 -Recurse → 進入資料夾之後,列出每層的東西(全部)

dir -Path 不存在的名稱

dir -Path 不存在的名稱 → 報錯
dir -Path 不存在的名稱 -Recurse → 雖然第一層沒有,但是,可能在別層找到。如果最後沒有找到,不會報錯


dir -Path 萬用字元 -Recurse

dir -Path A* -Recurse

第一層的A*都是資料夾
   進入資料夾之後,列出每層的東西(全部)。

第一層的A*有找到檔案 or 沒有找到東西(不存在)
   列出各層符合A*的檔案、資料夾

# 這三行很像
dir 新資料夾1 -Recurse
dir 新資料夾2 -Recurse
dir 新資料夾3 -Recurse

# 可以改寫成
dir 新資料夾* -Recurse
dir 新資料夾[1-3] -Recurse
#前提是:萬用字元的結果,只有資料夾

dir -Path 萬用字元 -Recurse -File

dir -Path A* -Recurse -File

第一層的A*都是資料夾
   進不去A*資料夾,沒有反應

   以下兩行,可以進入資料夾,列出各層的檔案
   dir -Path A1資料夾 -Recurse -File
   dir -Recurse -File

第一層的A*有找到檔案 or 沒有找到東西(不存在)
   列出各層符合A*的檔案,不列資料夾

dir -Path 萬用字元1 -Recurse -Include 萬用字元2

-Path 萬用字元1:尋找的範圍
-Include 萬用字元2:尋找的目標

dir -Path A* -Recurse -Include *.txt

第一層A*的檔案:如果符合*.txt就列出
第一層A*的資料夾:進入資料夾之後,每層符合*.txt的東西
   子資料夾名不符合*.txt,不會列出。但是,仍然會進入資料夾裡尋找。

dir -Path 萬用字元1 -Recurse -Include 萬用字元2 -File

-Path 萬用字元1:尋找的範圍
-Include 萬用字元2:尋找的目標
-File:過濾範圍目標

dir -Path A* -Recurse -Include *.txt -File

第一層A*的檔案:如果符合*.txt就列出
第一層A*的資料夾:因為-File的關係,不會進入資料夾尋找

dir          -Recurse -Include *.txt -File

沒有指定-Path:尋找的範圍工作目錄
-Include *.txt:尋找的目標*.txt
-File:進入工作目錄,尋找各層的檔案

dir -Path 萬用字元1 -Recurse -Exclude 萬用字元2

先做完dir -Path 萬用字元1 -Recurse
再去排除萬用字元2

dir -Path -Include (沒有使用-Recurse)

dir -Path 資料夾名 -Include 萬用字元

-Path 資料夾名:尋找的範圍
-Include 萬用字元:檢查範圍內容物

# 沒有反應。因為「新資料夾」名稱不符合 *.txt
dir -Path 新資料夾 -Include *.txt


# 進入A1(名稱符合A*)
# 檢查內容物、只列出內容物
dir -Path A1資料夾 -Include A*

# 多了-Recurse參數,不檢查資料夾名
dir -Path 新資料夾 -Include *.txt -Recurse

dir -Path 資料夾名 -Include 萬用字元 -File

-Path 資料夾名:尋找的範圍
-Include 萬用字元:檢查範圍內容物
-File:檢查範圍內容物

# 使用-File參數,不會進入資料夾
dir -Path A1資料夾          -Include A* -File

# -Recurse -File,仍然進入資料夾
dir -Path A1資料夾 -Recurse -Include A* -File

dir -Path 萬用字元1 -Include 萬用字元2

-Path 萬用字元1:尋找的範圍
-Include 萬用字元2:檢查範圍內容物

dir -Path C:\Pic\* -Include A*

# 結果
# C:\Pic\A.txt
# C:\Pic\A1\A11.txt
# 找到C:\Pic\A1資料夾,不列出資料夾,而是進去尋找

dir -Path 萬用字元1 -Include 萬用字元2 -File

-Path 萬用字元1:尋找的範圍
-Include 萬用字元2:檢查範圍內容物
-File:檢查範圍內容物

# 只找檔案
# 如果*代表資料夾,不會進去尋找
dir -Path C:\Pic\* -Include A* -File

dir -Include 萬用字元

# 沒有指定-Path參數,-Include參數檢查工作目錄
# 如果工作目錄是「根目錄」,沒有反應
dir -Include *.txt

dir -Include 萬用字元 -File

# 沒反應
# 因為-File參數,不會進入工作目錄尋找
dir -Include *.txt -File

萬用字元

3種萬用字元

萬用字元 意義
* 0個or1個or多個
? 1個
[abc] abc其中1個字,可以寫成[a-c]
PS E:\> (dir A*.txt).Name
A.txt
A1.txt
A11.txt
A111.txt

PS E:\> (dir A?.txt).Name
A1.txt

-Filter 2種萬用字元

萬用字元 意義
* 0個or1個or多個
? 0個or1個
PS E:\> (dir -filter A*.txt).Name
A.txt
A1.txt
A11.txt
A111.txt

PS E:\> (dir -filter A?.txt).Name
A.txt
A1.txt

萬用字元 []

PS E:\> (dir ?.txt).Name
A.txt
B.txt
C.txt

# 不區大小寫
PS E:\> (dir [ab].txt).Name
A.txt
B.txt

字面值 []

使用 -Literal參數,使[]成為普通的字

PS E:\> (dir -Literal [2022]001.txt).Name
[2022]001.txt

字面值 [] 和萬用字元 *

想要列出以下檔案

[2022]001.txt
[2023]001.txt
[2024]001.txt

# 使用 -Literal參數,報錯
PS E:\> (dir -Literal [*]001.txt).Name
dir : 找不到 'E:\[*]001.txt' 路徑,因為它不存在。

# 使用萬用字元
# [[] 表示普通的 [
# *
# []] 表示普通的 ]
PS E:\> (dir [[]*[]]001.txt).Name
[2022]001.txt
[2023]001.txt
[2024]001.txt

使用跳脫字元,使萬用字元變成普通的字

跳脫字元:位於鍵盤左上角、Esc的下面

-Path參數值跳脫萬用字元

引號的種類 跳脫字元的數量
單引號 2
雙引號 4
沒有使用引號 4
# 單引號:2個`
PS E:\> (dir -Path '``[*``]001.txt').Name
[2022]001.txt
[2023]001.txt
[2024]001.txt

# 雙引號:4個`
PS E:\> (dir -Path "````[*````]001.txt").Name
[2022]001.txt
[2023]001.txt
[2024]001.txt

# 沒有使用引號:4個`
PS E:\> (dir -Path ````[*````]001.txt).Name
[2022]001.txt
[2023]001.txt
[2024]001.txt

-Include參數值-like運算子跳脫萬用字元

引號的種類 跳脫字元的數量
單引號 1
雙引號 2
沒有使用引號 2
# 單引號:1個`
PS E:\> (dir -Path * -Include '`[*`]001.txt').Name
[2022]001.txt
[2023]001.txt
[2024]001.txt

# 雙引號:2個`
PS E:\> (dir -Path * -Include "``[*``]001.txt").Name
[2022]001.txt
[2023]001.txt
[2024]001.txt

# 沒有使用引號:2個`
PS E:\> (dir -Path * -Include ``[*``]001.txt).Name
[2022]001.txt
[2023]001.txt
[2024]001.txt
# 單引號:1個`
PS E:\> '[2022]001.txt' -like '`[*`]001.txt'
True

# 雙引號:2個`
PS E:\> '[2022]001.txt' -like "``[*``]001.txt"
True

-Filter參數值不用跳脫萬用字元

PS E:\> (dir -Filter [*]001.txt).Name
[2022]001.txt
[2023]001.txt
[2024]001.txt

-Filter參數值FAT32磁碟機使用萬用字元

# 列出別的檔案了
PS E:\> (dir -Filter *.txt).Name
B.txt
B.txt1
B.txt12
B.txt123

# 使用-Path參數,正常
PS E:\> (dir *.txt).Name
B.txt

使用萬用字元的注意事項

找不到東西的時候:沒有反應、不會報錯

  1. 沒有符合的東西
  2. 有符合的東西。因為萬用字元沒有寫好。所以找不到東西。

參考資料


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言