![](/img/trans.png)
[英]PowerShell Output Filenames of a Specific Extension to a Text File
[英]Output Filenames in a Folder to a Text File
使用 Windows 命令提示符或 Windows PowerShell,如何将单个目录中的所有文件名 output 转换为文本文件,不带文件扩展名?
在命令提示符中,我使用的是:
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 命令可以执行我正在寻找的操作?
在 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
注意:您也可以在 PowerShell 中使用dir
,它只是Get-ChildItem
的别名。 但是,为避免与cmd.exe
的内部dir
命令混淆,后者具有根本不同的语法,最好使用 PowerShell 原生别名gci
。 要查看为Get-ChildItem
定义的所有别名,请运行Get-Alias -Definition Get-ChildItem
请注意,使用 PowerShell 的>
重定向运算符 - 它实际上是
Out-File
cmdlet - 还会导致在枚举中意外包含 output、 files.txt
,如cmd.exe
和类似 POSIX 的 shell,例如bash
,因为首先创建目标文件。
相比之下,使用带有Out-File
(或Set-Content
,用于文本输入)的管道会延迟文件创建,直到初始化此单独管道段中的 cmdlet [1] - 因为第一段中的文件枚举已定义到那时已经完成,由于Get-ChildItem
调用包含在(...)
中,因此 output 文件未包含在枚举中。
另请注意,属性访问.BaseName
已应用于(Get-ChildItem...)
返回的所有文件,由于称为成员访问枚举的功能,这很方便地导致返回单个文件属性值的数组。
字符编码说明:
在 Windows PowerShell 中, Out-File
/ >
创建“Unicode”(UTF-16LE)文件,而Set-Content
使用系统遗留的 ANSI 代码页。
在 PowerShell (Core) 7+ 中,BOM-less UTF-8 是一致的默认值。
-Encoding
参数可用于显式控制编码。
[1] 在Set-Content
的情况下,它实际上被进一步延迟,即直到收到第一个输入 object,但这是一个不应依赖的实现细节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.