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 { $_

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

  • 根据所需的扩展,我们传入它,如-
    *.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