将文件夹中的文件名输出到文本文件
Output Filenames in a Folder to a Text File
使用 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 命令可以执行我正在寻找的操作?
在 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-native 别名 gci
。查看为 Get-ChildItem
、运行
Get-Alias -Definition Get-ChildItem
定义的所有别名
请注意,使用 PowerShell 的 >
重定向运算符 - 它实际上是
Out-File
cmdlet 的别名 - 也会导致不希望包含的输出,files.txt
,在枚举中,如cmd.exe
和POSIX-like shell如bash
,因为目标文件是先.
相比之下,使用带有 Out-File
的管道(或 Set-Content
, for text input) delays file creation until the cmdlet in this separate pipeline segment is initialized[1] - and because the file enumeration in the first segment has by definition already completed by that point, due to the Get-ChildItem
调用包含在 (...)
中,输出文件是 而不是 包含在枚举中。
另请注意,属性 访问 .BaseName
已应用于 所有 由 (Get-ChildItem ...)
返回的文件,这很方便地生成了一个数组由于称为 member-access enumeration.
的功能,单个文件的 属性 值被返回
Character-encoding 注:
在 Windows PowerShell 中,Out-File
/ >
创建“Unicode” (UTF-16LE) 文件,而 Set-Content
使用系统的旧版ANSI 代码页。
在 PowerShell (Core) 7+ 中,BOM-less UTF-8 是一致的默认值。
-Encoding
参数可用于显式控制编码。
[1] 在 Set-Content
的情况下,它实际上被延迟得更久,即直到接收到第一个输入对象,但这是一个不应该被延迟的实现细节靠。
使用 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 命令可以执行我正在寻找的操作?
在 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-native 别名 gci
。查看为 Get-ChildItem
、运行 Get-Alias -Definition Get-ChildItem
请注意,使用 PowerShell 的 >
重定向运算符 - 它实际上是 Out-File
cmdlet 的别名 - 也会导致不希望包含的输出,files.txt
,在枚举中,如cmd.exe
和POSIX-like shell如bash
,因为目标文件是先.
相比之下,使用带有 Out-File
的管道(或 Set-Content
, for text input) delays file creation until the cmdlet in this separate pipeline segment is initialized[1] - and because the file enumeration in the first segment has by definition already completed by that point, due to the Get-ChildItem
调用包含在 (...)
中,输出文件是 而不是 包含在枚举中。
另请注意,属性 访问 .BaseName
已应用于 所有 由 (Get-ChildItem ...)
返回的文件,这很方便地生成了一个数组由于称为 member-access enumeration.
Character-encoding 注:
在 Windows PowerShell 中,
Out-File
/>
创建“Unicode” (UTF-16LE) 文件,而Set-Content
使用系统的旧版ANSI 代码页。在 PowerShell (Core) 7+ 中,BOM-less UTF-8 是一致的默认值。
-Encoding
参数可用于显式控制编码。
[1] 在 Set-Content
的情况下,它实际上被延迟得更久,即直到接收到第一个输入对象,但这是一个不应该被延迟的实现细节靠。