获取PowerShell中文件的完整路径

Gag*_*gan 124 powershell powershell-2.0

我需要获取所有文件,包括属于特定类型的子文件夹中存在的文件.

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

Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}
Run Code Online (Sandbox Code Playgroud)

但是,它只返回文件名而不是整个路径.

Chr*_*s N 189

添加| select FullName到上面的行的末尾.如果您之后需要实际执行某些操作,则可能必须将其传递到foreach循环中,如下所示:

get-childitem "C:\windows\System32" -recurse | where {$_.extension -eq ".txt"} | % {
     Write-Host $_.FullName
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*evy 87

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

Get-ChildItem C:\WINDOWS\System32 -Filter *.txt -Recurse | % { $_.FullName }
Run Code Online (Sandbox Code Playgroud)

  • 这是真的.警告:这个命令实际上得到的文件就像`*.txt*`(`-Filter`使用CMD通配符).如果这不是你想要的,那么使用`-Include*.txt`. (12认同)

iml*_*esh 23

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

Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`Select-Object`返回`PSCustomObject`,而不是字符串.如果将result用作另一个程序的参数,则可能无效 (4认同)
  • 是的,@ Chintsu说.要获取字符串而不是`PSCustomObject`,请使用`-ExpandProperty FullName`而不是简单的`FullName`.据我所知,`-ExpandProperty`参数导致cmdlet将结果作为指定属性(本机?)类型而不是某些自定义对象返回. (4认同)

Jus*_*Guy 17

这是一个较短的一个:

(Get-ChildItem C:\MYDIRECTORY -Recurse).fullname > filename.txt
Run Code Online (Sandbox Code Playgroud)

  • 这是一个较短的一个:`(gci -rc:\).fullname` (22认同)
  • 这是一个较短的一个:`(ls -rc :).fullname` (13认同)
  • 这是一个较短的一个:`(ls -rc:\).fullname` (10认同)

Pol*_*hix 9

如果您想要相对路径,您可以使用该-Name标志.

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

  • 如果文件位于您启动的文件夹中,则仅显示文件名。如果它位于子文件夹中,则会给出“subfolder/file.txt” (2认同)

Jos*_*mão 8

我使用此行命令在“C:\Temp”中搜索“.xlm”文件,并将结果打印在文件“result.txt”中的全名路径:

(Get-ChildItem "C:\Temp" -Recurse | where {$_.extension -eq ".xml"} ).fullname > result.txt 
Run Code Online (Sandbox Code Playgroud)

在我的测试中,这种语法对我来说很有效。


小智 7

尝试这个:

Get-ChildItem C:\windows\System32 -Include *.txt -Recurse | select -ExpandProperty FullName
Run Code Online (Sandbox Code Playgroud)

  • 请添加一些信息,说明您的尝试有何不同以及为什么其他尝试无效。 (2认同)

js2*_*010 7

在 PS 5 中真的很烦人,其中 $_ 不会是 foreach 中的完整路径。这些是 FileInfo 和 DirectoryInfo 对象的字符串版本。出于某种原因,路径中的通配符可以修复它,或者使用 Powershell 6 或 7。您也可以通过管道连接到中间的 get-item。

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

Get-ChildItem -path C:\WINDOWS\System32 -Recurse | get-item | foreach { "$_" }
Run Code Online (Sandbox Code Playgroud)

这似乎是 .Net 的一个问题,已在 .Net Core (Powershell 7) 中得到解决: FileInfo / Directory 实例的字符串化行为自 v6.0.2 以来已发生变化 #7132


Man*_*ake 6

Get-ChildItem -Recurse *.txt | Format-Table FullName
Run Code Online (Sandbox Code Playgroud)

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


小智 5

这对我有用,并生成一个名称列表:

$Thisfile=(get-childitem -path 10* -include '*.JPG' -recurse).fullname
Run Code Online (Sandbox Code Playgroud)

我通过使用 找到了它get-member -membertype properties,这是一个非常有用的命令。它为您提供的大多数选项都附加了一个.<thing>,就像fullname这里一样。您可以坚持相同的命令;

  | get-member -membertype properties 
Run Code Online (Sandbox Code Playgroud)

在任何命令的末尾,以获取有关可以使用它们执行的操作以及如何访问这些操作的更多信息:

get-childitem -path 10* -include '*.JPG' -recurse | get-member -membertype properties
Run Code Online (Sandbox Code Playgroud)