測試於PowerShell 5.1
dir -Path 檔名
→ 檔案dir -Path 資料夾名
→ 進入資料夾之後,列出裡面的東西(全部)
檔名
、資料夾名
的差別
如果要列出資料夾本身
,使用Get-Item -Path 資料夾名
-Recurse 在各層尋找dir -Path 檔名 -Recurse
→ 各層符合檔名
的檔案、資料夾dir -Path 資料夾名 -Recurse
→ 進入資料夾之後,列出每層的東西(全部)
dir -Path 不存在的名稱
→ 報錯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 A* -Recurse -File
第一層的A*
都是資料夾
進不去A*資料夾
,沒有反應
以下兩行,可以進入資料夾,列出各層的檔案
dir -Path A1資料夾 -Recurse -File
dir -Recurse -File
第一層的A*
有找到檔案 or 沒有找到東西(不存在)
列出各層符合A*
的檔案,不列資料夾
-Path 萬用字元1
:尋找的範圍-Include 萬用字元2
:尋找的目標
dir -Path A* -Recurse -Include *.txt
第一層A*
的檔案:如果符合*.txt
就列出第一層A*
的資料夾:進入資料夾之後,每層符合*.txt
的東西
子資料夾名不符合*.txt
,不會列出。但是,仍然會進入資料夾裡尋找。
-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
萬用字元2
-Path 資料夾名
:尋找的範圍-Include 萬用字元
:檢查範圍
、內容物
# 沒有反應。因為「新資料夾」名稱不符合 *.txt
dir -Path 新資料夾 -Include *.txt
# 進入A1(名稱符合A*)
# 檢查內容物、只列出內容物
dir -Path A1資料夾 -Include A*
# 多了-Recurse參數,不檢查資料夾名
dir -Path 新資料夾 -Include *.txt -Recurse
-Path 資料夾名
:尋找的範圍-Include 萬用字元
:檢查範圍
、內容物
-File
:檢查範圍
、內容物
# 使用-File參數,不會進入資料夾
dir -Path A1資料夾 -Include A* -File
# -Recurse -File,仍然進入資料夾
dir -Path A1資料夾 -Recurse -Include A* -File
-Path 萬用字元1
:尋找的範圍-Include 萬用字元2
:檢查範圍
、內容物
dir -Path C:\Pic\* -Include A*
# 結果
# C:\Pic\A.txt
# C:\Pic\A1\A11.txt
# 找到C:\Pic\A1資料夾,不列出資料夾,而是進去尋找
-Path 萬用字元1
:尋找的範圍-Include 萬用字元2
:檢查範圍
、內容物
-File
:檢查範圍
、內容物
# 只找檔案
# 如果*代表資料夾,不會進去尋找
dir -Path C:\Pic\* -Include A* -File
# 沒有指定-Path參數,-Include參數檢查工作目錄
# 如果工作目錄是「根目錄」,沒有反應
dir -Include *.txt
# 沒反應
# 因為-File參數,不會進入工作目錄尋找
dir -Include *.txt -File
萬用字元 | 意義 |
---|---|
* | 0個 or1個 or多個 字 |
? | 1個 字 |
[abc] | a 、b 、c 其中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
萬用字元 | 意義 |
---|---|
* | 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
找不到東西的時候:沒有反應、不會報錯
Get-ChildItem (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn
powershell - Copy file with square brackets [ ] in the filename and use * wildcard - Stack Overflow