Powershell命令获取所有所需文件扩展名的所有文件路径

时间:2019-04-22 12:01:11

标签: windows powershell directory subdirectory

我想在Windows计算机上使用PowerShell搜索所有驱动器,以获取所有文件及其扩展名的列表-

  1. 根据所需的扩展名,我们像-*.mp3
  2. 获取所有具有多个扩展名的文件,例如-*.txt, *.mp3等。

我尝试了以下脚本,但是它仅提供运行位置的信息。但是我想扫描整个机器。

Get-ChildItem -Path .\ -Filter ***.doc** -Recurse -File| Sort-Object Length -Descending | ForEach-Object { $_.BaseName }

3 个答案:

答案 0 :(得分:1)

检出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 }
}

没有测试,但是您知道了。

答案 1 :(得分:1)

-Include上使用Get-ChildItem将允许您指定扩展名列表。 -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"

答案 2 :(得分:0)

这不仅仅是原始问题的要求,但是如果您要列出所有文件的麻烦,建议您也获取文件哈希,以便确定是否有重复项。简单的文件名搜索将不会检测是否已使用其他名称保存了相同的文件。添加到已发布的@lit(https://stackoverflow.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
    }

文件哈希的添加将使您能够查看是否存在重复项,全名将使您能够看到它们的位置。