Я хочу найти файлы рекурсивно, и для этого я использую

> gci -name -filter *.py -r

Опция -name дает только имя файла, чтобы получить одну строку для каждого найденного элемента, как требуется. Но элементы, которые я получаю в качестве вывода, показывают только относительный путь, например

python\scr.py

(текущий каталог C:\python), в то время как аналогичная команда в cmd.exe

> where /r . *.py

дает

C:\data\python\scr.py

как и хотел.

Есть ли способ получить это с помощью gci?

Я хотел бы свести к минимуму обвязку /greping с помощью регулярных выражений и тому подобное.

2 ответа2

1

Я не уверен, почему вы не любите пайпинг, так как это, возможно, самая важная особенность PowerShell, но я бы пропустил параметр -name . Затем используйте Select-Object (псевдоним, select), чтобы получить FullName объекта FileInfo, и используйте ключ -expand для вывода только строкового значения свойства FullName. Если вы хотите, чтобы оно было коротким, вы можете также -filter и добавить ' . ', поскольку второй позиционный параметр -Filter .

gci . *.py -r| select -exp fullname

Или используйте Foreach-Object (псевдоним, % или foreach) и выведите FullName.

gci . *.py -r| % {$_.FullName}
0

Чтобы избежать использования трубопроводов, вы можете использовать следующее:

(gci -filter *.py -recurse).FullName

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .