Вопрос:
Мне нужно получить все файлы, включая файлы, находящиеся в подпапках, принадлежащих к определенному типу.
Я делаю что-то вроде этого, используя Get-ChildItem:
Get-ChildItem «C:windowsSystem32» -Recurse | where {$_.extension -eq «.txt»}
Однако он возвращает мне только имена файлов, а не весь путь.
Лучший ответ:
Добавьте | select FullName в конец вашей строки выше. Если вам нужно что-то делать с этим позже, вам, возможно, придется перевести его в цикл foreach, например:
get-childitem «C:windowsSystem32» -recurse | where {$_.extension -eq «.txt»} | % { Write-Host $_.FullName } Ответ №1
Это должно выполняться намного быстрее, чем использование поздней фильтрации:
Get-ChildItem C:WINDOWSSystem32 -Filter *.txt -Recurse | % { $_.FullName } Ответ №2
Вы также можете использовать Select-Object так:
Get-ChildItem «C:WINDOWSSystem32» *.txt -Recurse | Select-Object FullName Ответ №3
Здесь короче:
(Get-ChildItem C:MYDIRECTORY -Recurse).fullname > filename.txt Ответ №4
Если относительные пути – это то, что вы хотите, вы можете просто использовать флаг -Name.
Get-ChildItem «C:windowsSystem32» -Recurse -Filter *.txt -Name
Ответ №5Get-ChildItem -Recurse *.txt | Format-Table FullName
Вот что я использовал. Я считаю, что это более понятно, поскольку он не содержит синтаксиса цикла.
Ответ №6
Попробуйте следующее:
Get-ChildItem C:windowsSystem32 -Include *.txt -Recurse | select -ExpandProperty FullName Ответ №7
Это сработало для меня и создает список имен:
$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 Ответ №8gci «C:WINDOWSSystem32» -r -include .txt | select fullname Ответ №9
[альтернативный синтаксис]
Для некоторых людей операторы с направленными трубами не являются их вкусом, но скорее предпочитают цепочки. См. Некоторые интересные мнения по этой теме, разделяемые в 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> )
Ответ №10
Действительно раздражающая вещь в PS 5, где $ _ не будет полным путем в foreach. Это строковые версии объектов FileInfo и DirectoryInfo. По какой-то причине подстановочный знак в пути исправляет это, или используйте PS 6. Вы также можете направить pipeку, чтобы получить элемент посередине.
Get-ChildItem -path C:WINDOWSSystem32*.txt -Recurse | foreach { «$_» } Get-ChildItem -path C:WINDOWSSystem32 -Recurse | get-item | foreach { «$_» } Ответ №11
Я использую приведенный ниже скрипт для извлечения всего пути к папке:
Get-ChildItem -path «C:» -Recurse -Directory -Force -ErrorAction SilentlyContinue | Select-Object FullName | Out-File «Folder_List.csv»
Полный путь к папке не идет. После 113 символов, идет:
Example — C:ProgramDataMicrosoftWindowsDeviceMetadataCachedmrccacheen-USec4d5fdd-aa12-400f-83e2-7b0ea6023eb7Windows…