如何通过命令行从多个文件夹中获取完整文件名到 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:”是什么?
/A
是attribute
开关,请参阅dir /?
了解更多信息以上是关于如何通过命令行从多个文件夹中获取完整文件名到 csv的主要内容,如果未能解决你的问题,请参考以下文章