使用 Windows 命令提示符或 Windows PowerShell,如何將單個目錄中的所有檔案名輸出到文本檔案,而不使用檔案擴展名?
在命令提示符中,我使用的是:
dir /b > files.txt
結果
01 - Prologue.mp3
02 - Title.mp3
03 - End.mp3
files.txt
期望的輸出
01 - Prologue
02 - Title
03 - End
請注意“dir /b > files.txt”命令包括檔案擴展名并將檔案名放在底部。
在不使用批處理檔案的情況下,是否有一個干凈的命令提示符或 PowerShell 命令可以執行我正在尋找的操作?
uj5u.com熱心網友回復:
在 PowerShell 中:
# Get-ChildItem (gci) is PowerShell's dir equivalent.
# -File limits the output to files.
# .BaseName extracts the file names without extension.
(Get-ChildItem -File).BaseName | Out-File files.txt
注意:您也可以dir在 PowerShell 中使用,它只是Get-ChildItem. 但是,為了避免與具有根本不同語法cmd.exe的內部dir命令混淆,最好使用 PowerShell 原生別名gci. 要查看為 定義的所有別名Get-ChildItem,請運行Get-Alias -Definition Get-ChildItem
請注意,使用 PowerShell 的>重定向運算子(實際上是Out-Filecmdlet 的別名)也會導致在files.txt列舉中不希望包含輸出 , ,如在cmd.exe類似 POSIX 的 shell 中,例如,因為首先bash創建目標檔案.
相比之下,使用帶有Out-File(或Set-Content用于文本輸入)的管道會延遲檔案創建,直到這個單獨的管道段中的 cmdlet 被初始化[1] - 并且因為根據定義,第一個段中的檔案列舉到那時已經完成,由于Get-ChildItem呼叫包含在 中(...),因此輸出檔案不包含在列舉中。
另請注意,屬性訪問.BaseName已應用于由 . 回傳的所有 檔案(Get-ChildItem ...),這很方便地導致回傳單個檔案的屬性值的陣列,這要歸功于名為member enumeration的功能。
字符編碼說明:
在 Windows PowerShell 中,
Out-File/>創建“Unicode”(UTF-16LE) 檔案,而Set-Content使用系統的舊 ANSI 代碼頁。在 PowerShell (Core) 7 中,無 BOM 的 UTF-8 是一致的默認設定。
該-Encoding引數可用于顯式控制編碼。
[1] 在 的情況下Set-Content,它實際上被進一步延遲,即直到接收到第一個輸入物件,但這是一個不應該依賴的實作細節。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/433436.html
