Получить полный путь к файлам в PowerShell

Мне нужно получить все файлы, включая файлы, находящиеся в подпапках, принадлежащих к определенному типу.

Я делаю что-то вроде этого, используя Get-ChildItem:

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

Однако он возвращает мне только имена файлов, а не весь путь.

Ответ 1

Добавьте | select FullName в конец вашей строки выше. Если вам нужно что-то делать с этим позже, вам, возможно, придется перевести его в цикл foreach, например:

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

Ответ 2

Это должно выполняться намного быстрее, чем использование поздней фильтрации:

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

Ответ 3

Вы также можете использовать Select-Object так:

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

Ответ 4

Здесь короче:

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

Ответ 5

Если относительные пути - это то, что вы хотите, вы можете просто использовать флаг -Name.

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

Ответ 6

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

Вот что я использовал. Я считаю, что это более понятно, поскольку он не содержит синтаксиса цикла.

Ответ 7

Попробуйте следующее:

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

Ответ 8

Это сработало для меня и создает список имен:

$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

Ответ 9

gci "C:\WINDOWS\System32" -r -include .txt | select fullname

Ответ 10

[альтернативный синтаксис]

Для некоторых людей операторы с направленными трубами не являются их вкусом, но скорее предпочитают цепочки. См. Некоторые интересные мнения по этой теме, разделяемые в roslyn tracker: dotnet/roslyn # 5445.

Исходя из случая и контекста, один из таких подходов можно считать неявным (или косвенным). Например, в этом случае с использованием pipe fromnumerable требуется специальный токен $_ (aka PowerShell "THIS" token), который может показаться неприятным для некоторых.

Для таких ребята, это более сжатый, прямой способ сделать это с помощью цепочки точек:

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

(<rant> Обратите внимание, что парсер PowerShell-аргументов аргументов принимает имена парциальных параметров. Таким образом, помимо -recursive; -recursiv, -recursi, -recurs, -recur, -recu, -rec и -re, но, к сожалению, не -r.., который является единственным правильным выбором, который имеет смысл с единственным символом - (если мы идем по соглашениям POSIXy UNIXy)! </rant> )

Ответ 11

Действительно раздражающая вещь в PS 5, где $ _ не будет полным путем в foreach. Это строковые версии объектов FileInfo и DirectoryInfo. По какой-то причине подстановочный знак в пути исправляет это, или используйте PS 6. Вы также можете направить pipeку, чтобы получить элемент посередине.

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

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

Ответ 12

Я использую приведенный ниже скрипт для извлечения всего пути к папке:

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...