如何通过命令行从多个文件夹中获取完整文件名到 csv

Posted

技术标签:

【中文标题】如何通过命令行从多个文件夹中获取完整文件名到 csv【英文标题】:How to get the full file names from multiple folders through command line into a csv 【发布时间】:2015-10-04 19:29:02 【问题描述】:

感谢这里的几个人,我能够通过命令行连接到我的 WD NAS。

现在我想获取我存储在那里的电影的标题。我知道dir /b > file.csv 命令,但这似乎不适用于我的结构。我有一个名为 Data 的文件夹(我有 X:映射到这个位置“\MYNAS\Data”),在 Data 文件夹中我还有其他文件夹,例如 Action、Drama、Documentary 等。所以当我使用 dir /b > file.csv 命令时,它给了我数据中的文件夹名称,而不是文件夹中的电影。

有没有一种简单的方法可以从每个文件夹中提取文件并将它们全部输出到一个 CSV,而不是为每个文件夹创建一个单独的 csv?

我更喜欢用命令提示符解决这个问题,因为我最熟悉它,但我也愿意使用 powershell。

【问题讨论】:

Recursive directory listing in dos的可能重复 【参考方案1】:

如果您想在cmd.exe 中使用dir 命令,则需要/S 开关以递归方式遍历文件夹,并且可能需要/A:-D 从结果中排除目录和联结:

dir X:\Data /A:-D /S /B > files.csv

您也可以使用 PowerShell,等效的 cmdlet 将是 Get-ChildItem:

Get-ChildItem X:\Data -File -Recurse | select FullName | Out-File "files.csv"

正如@Matt 所说,此语句仅适用于 PowerShell 版本 3.0 或更高版本。在早期版本中,-File 参数不起作用,因此您必须手动过滤目录:

Get-ChildItem X:\Data -Recurse | Where-Object -not $_.PSIsContainer | Select FullName | Out-File "files.csv"

您可以使用Extension 属性扩展Where-Object 过滤器以排除具有某些扩展名的文件:

$ExcludeExtensions = ".exe",".pdf"
Get-ChildItem X:\Data -Recurse | Where-Object (-not $_.PSIsContainer) -and ($ExcludeExtensions -notcontains $_.Extension) | Select FullName | Out-File "files.csv"

【讨论】:

请注意,您需要 PowerShell 3.0 才能工作。 我尝试了你给我的第一个建议,一旦我省略了 \Data 部分,它就起作用了,只是它现在给了我每个文件的完整路径。例如,它不只是说“第 9 区”,而是将其显示为“X:/Data/Distrcit9”。仅获取名称而不是完整位置的任何想法? @MasonEvans 抱歉,但我认为使用 /s 时的完整路径输出是设计使然。使用 PowerShell 你可以Select Name 而不是Select FullName 来获取文件名 好的,谢谢,最后一件事,第一个示例中的“A:”是什么? /Aattribute 开关,请参阅dir /? 了解更多信息

以上是关于如何通过命令行从多个文件夹中获取完整文件名到 csv的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 命令行从文件中运行 python 函数?

如何通过命令行从docker hub删除docker镜像?

mac命令行 从linux服务器下载文件到本地

java命令行从编译到打jar包到执行

使用 gcc 命令行从 .c 文件构建 .so 文件

如何将行从另一个数据库文件插入到房间数据库中?