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



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



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



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


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

1702   10  

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

вот более короткий:

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

Если относительные пути, что вы хотите, вы можете просто использовать -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

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

для некоторых людей, дирекционные операторы трубы нет их вкуса,но они довольно предпочитают приковать. Смотрите некоторые интересные мнения по этой теме, которыми делятся в 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

    Ничего не найдено.