Windows Powershell命令获取所有所需文件扩展名的所有文件路径
我想在windows计算机上使用PowerShell搜索所有驱动器,以获取所有文件及其扩展名的列表-Windows Powershell命令获取所有所需文件扩展名的所有文件路径,windows,powershell,directory,subdirectory,Windows,Powershell,Directory,Subdirectory,我想在windows计算机上使用PowerShell搜索所有驱动器,以获取所有文件及其扩展名的列表- 根据所需的扩展,我们传入它,如-*.mp3或 获取具有多个扩展名的所有文件,如-*.txt、*.mp3等 我尝试了下面的脚本,但它只提供我们运行它的地方的信息。但我想扫描整个机器 Get-ChildItem -Path .\ -Filter ***.doc** -Recurse -File| Sort-Object Length -Descending | ForEach-Object { $_
*.mp3
或*.txt、*.mp3
等Get-ChildItem -Path .\ -Filter ***.doc** -Recurse -File| Sort-Object Length -Descending | ForEach-Object { $_.BaseName }
签出
Get-PSDrive
cmdlet。它返回驱动器列表,您可以使用-PSProvider FileSystem
参数指定磁盘驱动器:
foreach ( $drive in $(Get-PSDrive -PSProvider FileSystem) ) {
Get-ChildItem -Path $drive.Root -Filter ***.doc** -Recurse -File |
Sort-Object Length -Descending |
ForEach-Object { $_.BaseName }
}
没有测试它,但您了解了它。检查
get-PSDrive
cmdlet。它返回驱动器列表,您可以使用-PSProvider FileSystem
参数指定磁盘驱动器:
foreach ( $drive in $(Get-PSDrive -PSProvider FileSystem) ) {
Get-ChildItem -Path $drive.Root -Filter ***.doc** -Recurse -File |
Sort-Object Length -Descending |
ForEach-Object { $_.BaseName }
}
没有进行测试,但您了解了。使用
上的-Include
可以指定扩展列表。-ErrorAction
将导致跳过不可用的驱动器,例如未安装的CD驱动器
Get-PSDrive -PSProvider FileSystem |
ForEach-Object {
Get-ChildItem -Path $_.Root -Recurse -Include '*.doc*', '*.txt' -ErrorAction SilentlyContinue |
ForEach-Object { $_.Name }
} |
ForEach-Object {[PSCustomObject]@{HashCode = $_.GetHashCode(); FullName = $_.FullName}}
} |
Export-Csv -Path $TempFile -NoTypeInformation -Encoding ASCII
更新:
这里有一个更好的方法。它将防止未知扩展进入混合,例如“Microsoft.NET.Sdk.Publish.Docker.targets”
在Get ChildItem
上使用-Include
将允许您指定扩展名列表。-ErrorAction
将导致跳过不可用的驱动器,例如未安装的CD驱动器
Get-PSDrive -PSProvider FileSystem |
ForEach-Object {
Get-ChildItem -Path $_.Root -Recurse -Include '*.doc*', '*.txt' -ErrorAction SilentlyContinue |
ForEach-Object { $_.Name }
} |
ForEach-Object {[PSCustomObject]@{HashCode = $_.GetHashCode(); FullName = $_.FullName}}
} |
Export-Csv -Path $TempFile -NoTypeInformation -Encoding ASCII
更新:
这里有一个更好的方法。它将防止未知扩展进入混合,例如“Microsoft.NET.Sdk.Publish.Docker.targets”
这比原来的问题要复杂得多,但是如果您要麻烦地列出所有文件,我建议您也获取filehash,以便确定是否有重复的文件。简单的文件名搜索不会检测同一文件是否以不同的名称保存。添加到@lit()发布的内容:
$ExtensionList = @('.txt', '.doc', '.docx', '.mp3')
Get-PSDrive -PSProvider FileSystem |
ForEach-Object {
Get-ChildItem -Path $_.Root -Recurse -ErrorAction SilentlyContinue |
Where-Object { $ExtensionList -eq $_.Extension } |
## ForEach-Object { $_.Name, $_.FullName, $_.GetHashCode() }
Select-Object @{Name="Name";Expression={$_.Name}}, @{Name="Hash";Expression={$_.GetHashCode()}}, @{Name="FullName";Expression={$_.FullName}} |
Export-Csv -Path C:\Temp\testing.csv -NoTypeInformation -Append
}
添加文件散列将允许您查看是否有重复的文件,而全名将允许您查看它们的位置。这比原始问题所问的要多,但是如果您要麻烦地列出所有文件,我建议也获取filehash,以便确定是否有重复的文件。简单的文件名搜索不会检测同一文件是否以不同的名称保存。添加到@lit()发布的内容:
$ExtensionList = @('.txt', '.doc', '.docx', '.mp3')
Get-PSDrive -PSProvider FileSystem |
ForEach-Object {
Get-ChildItem -Path $_.Root -Recurse -ErrorAction SilentlyContinue |
Where-Object { $ExtensionList -eq $_.Extension } |
## ForEach-Object { $_.Name, $_.FullName, $_.GetHashCode() }
Select-Object @{Name="Name";Expression={$_.Name}}, @{Name="Hash";Expression={$_.GetHashCode()}}, @{Name="FullName";Expression={$_.FullName}} |
Export-Csv -Path C:\Temp\testing.csv -NoTypeInformation -Append
}
添加文件散列将允许您查看是否有重复的文件,而全名将允许您查看它们的位置。查找如何获取本地驱动器号。一旦你有了它,你就可以遍历结果列表了。[grin]类似的powershell列表驱动器号将让您开始使用。欢迎作为新用户使用SO。请带上这本书,同时阅读。当不知道文件的位置时,BaseName
的输出值是多少,按文件长度值排序?如果您要麻烦地列出所有文件,我建议您也获取文件哈希,以便确定是否有重复的文件。简单的文件名搜索无法检测同一文件是否以不同的名称保存。请查找如何获取本地驱动器号。一旦你有了它,你就可以遍历结果列表了。[grin]类似的powershell列表驱动器号将让您开始使用。欢迎作为新用户使用SO。请带上这本书,同时阅读。当不知道文件的位置时,BaseName
的输出值是多少,按文件长度值排序?如果您要麻烦地列出所有文件,我建议您也获取文件哈希,以便确定是否有重复的文件。一个简单的文件名搜索不会检测同一个文件是否以不同的名称保存。它工作得很好,但是随着文件及其扩展名的增加,我还想得到它们的完整路径。我们可以添加一些“|”或“;”在文件名及其路径之间,以便将其划分为excel以提高可见性,并将输出放在单个txt文件中。@Vijaykhurava-答案已编辑为分别显示目录名和文件名。使用连接路径
将它们重新组合在一起。使用导出Csv
上的-Delimiter
参数指定所需的字段分隔符。谢谢,但非常抱歉,我不擅长powershell:-)当我按原样运行脚本时,它不会在temp下生成任何输出或在整个计算机上导出Csv,但是,当我删除$temp file&导出csv的最后一行时,它将生成输出,但输出不除以;或|符号。@Vijaykhurava-我前面提到过使用-分隔符参数。临时文件的名称在末尾写入控制台。您可以很好地使用PowerShell。非常感谢@lit,我尝试为这两个版本标记resolved,但我想只有一个版本是允许的,但非常感谢您在这里帮助我的提示和支持方式:-)它可以很好地工作,但除了文件及其扩展名外,我还想了解它们的完整路径。我们可以添加一些“|”或“;”在文件名及其路径之间,以便将其划分为excel以提高可见性,并将输出放在单个txt文件中。@Vijaykhurava-答案已编辑为分别显示目录名和文件名。使用连接路径
将它们重新组合在一起。使用导出Csv
上的-Delimiter
参数指定所需的字段分隔符。谢谢,但非常抱歉,我不擅长powershell:-)当我按原样运行脚本时,它不会在temp下生成任何输出或在整个计算机上导出Csv,但是,当我删除$temp file&导出csv的最后一行时,它将生成输出,但输出不除以;或|符号。@Vij