Получить полный путь к файлам в PowerShell
Мне нужно получить все файлы, включая файлы в подпапках, которые принадлежат к определенному типу.
Я делаю что-то вроде этого, используя Get-ChildItem:
Get-ChildItem "C:windowsSystem32" -Recurse | where {$_.extension -eq ".txt"}
однако, это только возвращает мне имена файлов, а не весь путь.
10 ответов:
добавить
| 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
Если относительные пути, что вы хотите, вы можете просто использовать
-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
[альтернативный синтаксис]
для некоторых людей, дирекционные операторы трубы нет их вкуса,но они довольно предпочитают приковать. Смотрите некоторые интересные мнения по этой теме, которыми делятся в roslyn issue tracker:dotnet / roslyn#5445.
исходя из случая и контекста, один из этих подходов можно считать неявным (или косвенным). Например, в этом случае использование pipe против enumerable требует специального токена
$_(Он жеPowerShell's "THIS" token) могут появиться неприятно для некоторых.для таких парней, вот более краткий, прямой способ сделать это с точка сцепления:
(gci . -re -fi *.txt).FullName(
обратите внимание, что синтаксический анализатор аргументов команд PowerShell принимает имена частичных параметров. Так что в дополнение к -recursive;-recursiv,-recursi,-recurs,-recur,-recu,-recи-reпринимаются, но, к сожалению, не-r.. это единственный правильный выбор, который имеет смысл с одним-характер (если мы идем по соглашениям POSIXy UNIXy)! )
это сработало для меня, и производит список имен:
$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
Comments