用于获取所有所需文件扩展名的所有文件路径的 Powershell 命令
Powershell command to fetch all file path for all desired files extensions
我想在 windows 机器上使用 PowerShell 搜索所有驱动器以获取所有文件及其扩展名的列表 -
- 根据所需的扩展名,我们将其传入 -
*.mp3
或
- 获取所有具有多个扩展名的文件,例如 -
*.txt, *.mp3
等
我试过下面的脚本,但它只提供我们所在位置的信息 运行。但是我想扫描整机。
Get-ChildItem -Path .\ -Filter ***.doc** -Recurse -File| Sort-Object Length -Descending | ForEach-Object { $_.BaseName }
检查 Get-PSDrive
cmdlet。它 returns 一个驱动器列表,您可以使用 -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-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."
$ExtensionList = @('.txt', '.doc', '.docx', '.mp3')
$TempFile = Join-Path -path $Env:TEMP -ChildPath "$($pid.ToString()).tmp"
Get-PSDrive -PSProvider FileSystem |
ForEach-Object {
Get-ChildItem -Path $_.Root -Recurse -ErrorAction SilentlyContinue |
Where-Object { $ExtensionList -contains $_.Extension } |
ForEach-Object {
[PSCustomObject]@{
HashCode = $_.GetHashCode();
DirectoryName = $_.DirectoryName
Name = $_.Name
}
}
} |
Export-Csv -Path $TempFile -Delimiter ';' -NoTypeInformation -Encoding ASCII
Write-Host "The temp file is $TempFile"
这比原来的问题问的要多,但如果您不厌其烦地列出所有文件,我建议您也获取文件哈希,这样您就可以确定是否有重复文件。简单的文件名搜索不会检测同一文件是否以不同的名称保存。添加@lit (https://whosebug.com/users/447901/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
}
添加文件哈希将使您能够查看是否有重复项,而全名将使您能够查看它们所在的位置。
我想在 windows 机器上使用 PowerShell 搜索所有驱动器以获取所有文件及其扩展名的列表 -
- 根据所需的扩展名,我们将其传入 -
*.mp3
或 - 获取所有具有多个扩展名的文件,例如 -
*.txt, *.mp3
等
我试过下面的脚本,但它只提供我们所在位置的信息 运行。但是我想扫描整机。
Get-ChildItem -Path .\ -Filter ***.doc** -Recurse -File| Sort-Object Length -Descending | ForEach-Object { $_.BaseName }
检查 Get-PSDrive
cmdlet。它 returns 一个驱动器列表,您可以使用 -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-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."
$ExtensionList = @('.txt', '.doc', '.docx', '.mp3')
$TempFile = Join-Path -path $Env:TEMP -ChildPath "$($pid.ToString()).tmp"
Get-PSDrive -PSProvider FileSystem |
ForEach-Object {
Get-ChildItem -Path $_.Root -Recurse -ErrorAction SilentlyContinue |
Where-Object { $ExtensionList -contains $_.Extension } |
ForEach-Object {
[PSCustomObject]@{
HashCode = $_.GetHashCode();
DirectoryName = $_.DirectoryName
Name = $_.Name
}
}
} |
Export-Csv -Path $TempFile -Delimiter ';' -NoTypeInformation -Encoding ASCII
Write-Host "The temp file is $TempFile"
这比原来的问题问的要多,但如果您不厌其烦地列出所有文件,我建议您也获取文件哈希,这样您就可以确定是否有重复文件。简单的文件名搜索不会检测同一文件是否以不同的名称保存。添加@lit (https://whosebug.com/users/447901/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
}
添加文件哈希将使您能够查看是否有重复项,而全名将使您能够查看它们所在的位置。