在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 properties
find了它,这是一个令人难以置信的有用的命令。 它给你的大部分选项都附加了一个.<thing>
,就像fullname
在这里。 你可以坚持相同的命令;
| get-member -membertype properties
任何命令的结尾都可以获得更多关于你可以使用的东西的信息,以及如何访问这些东西:
get-childitem -path 10* -include '*.JPG' -recurse | get-member -membertype properties