获取在PowerShell中的文件的完整路径

问题描述 投票:114回答:12

我需要得到包括所有属于特定类型出现在子文件夹中的文件的文件。

我做这样的事情,使用Get-ChildItem

Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}

然而,这只是我返回的文件名,而不是整个路径。

powershell powershell-v2.0
12个回答
182
投票

添加| select FullName到您的线上方结束。如果您需要实际做的东西之后,你可能要管它变成一个foreach循环,就像这样:

get-childitem "C:\windows\System32" -recurse | where {$_.extension -eq ".txt"} | % {
     Write-Host $_.FullName
}

1
投票

[替代语法]

对于一些人来说,定向管道运营商都没有自己的口味,但他们宁可选择链接。查看此主题Roslyn的问题跟踪共享一些有趣的观点:dotnet/roslyn#5445

根据情况和环境中,这种方法的一个可以被认为是隐式的(或间接)。例如,在这种情况下使用烟斗枚举需要特殊的记号$_(又名PowerShell's "THIS" token)可能会出现令人反感一些。

对于这样的小伙子们,这里是点链接做的更简洁,直接的方法:

(gci . -re -fi *.txt).FullName

(<咆哮>请注意,PowerShell的命令参数解析器接受部分参数名称所以除了-recursive; -recursiv-recursi-recurs-recur-recu-rec-re被接受,但不幸的是没有-r ..这是唯一正确的选择这是有道理的单-字符(如果我们通过POSIXy UNIXy公约)!)


1
投票

在PS中5,其中$ _不会的foreach内的完整路径真的很烦人的事情。这些都是FileInfo的和的DirectoryInfo对象的字符串版本。出于某种原因,在路径通配符修复它,或者在中间使用PS 6.你也可以管得到项目。

Get-ChildItem -path C:\WINDOWS\System32\*.txt -Recurse | foreach { "$_" }

Get-ChildItem -path C:\WINDOWS\System32 -Recurse | get-item | foreach { "$_" }

编辑:在路径不是通配符,在路径的时期!


0
投票

我使用下面的脚本来提取所有的文件夹路径:

Get-ChildItem -path "C:\" -Recurse -Directory -Force -ErrorAction SilentlyContinue | Select-Object FullName | Out-File "Folder_List.csv"

完整的文件夹路径不来了。经过113个字符,是未来:

Example - C:\ProgramData\Microsoft\Windows\DeviceMetadataCache\dmrccache\en-US\ec4d5fdd-aa12-400f-83e2-7b0ea6023eb7\Windows...

87
投票

这应该执行比使用后期过滤快得多:

Get-ChildItem C:\WINDOWS\System32 -Filter *.txt -Recurse | % { $_.FullName }

22
投票

您还可以使用Select-Object像这样:

Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName

16
投票

这里有一个较短的一个:

(Get-ChildItem C:\MYDIRECTORY -Recurse).fullname > filename.txt

9
投票

如果相对路径是你想要的,你可以只使用-Name标志。

Get-ChildItem "C:\windows\System32" -Recurse -Filter *.txt -Name


4
投票
Get-ChildItem -Recurse *.txt | Format-Table FullName

这是我用什么。我觉得这是更容易理解,因为它不包含任何循环语法。


3
投票

尝试这个:

Get-ChildItem C:\windows\System32 -Include *.txt -Recurse | select -ExpandProperty FullName

2
投票

这为我工作,并产生名称的列表:

$Thisfile=(get-childitem -path 10* -include '*.JPG' -recurse).fullname

我发现它使用get-member -membertype properties,一个非常有用的命令。大多数的它给你的选项都附有一个.<thing>,像fullname就在这里。你能坚持同样的命令。

  | get-member -membertype properties 

在任何命令结束时得到的东西,你可以与他们以及如何访问这些操作的详细信息:

get-childitem -path 10* -include '*.JPG' -recurse | get-member -membertype properties

1
投票
gci "C:\WINDOWS\System32" -r -include .txt | select fullname
© www.soinside.com 2019 - 2024. All rights reserved.