在PowerShell中获取文件的完整path

我需要获取所有文件,包括属于特定types的子文件夹中的文件。

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

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

但是,它只返回文件名称而不是整个path。

添加| select FullName | select FullName到上面行的结尾。 如果你事后需要做些什么的话,你可能需要把它放到一个foreach循环中,像这样:

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

这应该比使用后期过滤更快:

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

你也可以像这样使用Select-Object :

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

这是一个较短的一个:

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

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

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

 Get-ChildItem -Recurse *.txt | Format-Table FullName 

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

尝试这个:

 Get-ChildItem C:\windows\System32 -Include *.txt -Recurse | select -ExpandProperty FullName 
 gci "C:\WINDOWS\System32" -r -include .txt | select fullname 

[替代语法]

对于一些人来说,定向pipe道运营商不是他们的口味,而是宁愿链接。 请参阅roslyn问题跟踪器中共享的一些有趣的观点: dotnet / roslyn#5445 。

基于案例和上下文,这种方法之一可以被认为是隐式的(或间接的)。 例如,在这种情况下,针对可枚举使用pipe道需要特殊令牌$_ (又名PowerShell's "THIS" token )可能会让某些人感到厌恶。

对于这样的家伙,这是一个更简洁,直接的方式来做点链接

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

(注意,PowerShell的命令参数parsing器接受部分参数名称,所以除了-recursive ; -recursiv-recursi-recurs-recur-recu-rec-re之外, -r ..这是唯一正确的select是有意义的单个字符(如果我们去POSIXy UNIXy约定)!</ rant>)

这为我工作,并产生一个名单:

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

我通过使用get-member -membertype propertiesfind了它,这是一个令人难以置信的有用的命令。 它给你的大部分选项都附加了一个.<thing> ,就像fullname在这里。 你可以坚持相同的命令;

  | get-member -membertype properties 

任何命令的结尾都可以获得更多关于你可以使用的东西的信息,以及如何访问这些东西:

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