繁体   English   中英

Output 文件夹中的文件名到文本文件

[英]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

所需 Output

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM