我想递归查找文件,为此我使用
> gci -name -filter *.py -r
选项-name
仅提供文件名,以便根据需要为找到的每个项目获取一行。但我得到的输出项目仅显示相对路径,例如
python\scr.py
(当前目录是C:\python
),而类似的命令cmd.exe
> where /r . *.py
给出
C:\data\python\scr.py
如所希望的。
有没有什么办法可以得到这个gci
?
我想尽量减少使用正则表达式或类似物的管道/greping。
答案1
我不确定您为什么不喜欢管道,因为它可以说是 PowerShell 最重要的功能,但我会省略该 -name
参数。然后,使用Select-Object
(alias, select
) 获取 FileInfo 对象的 FullName,并使用开关-expand
仅输出 FullName 属性的字符串值。如果要保持简短,也可以省略-filter
并添加“ .
”,因为第二个位置参数是-Filter
。
gci . *.py -r| select -exp fullname
或者使用Foreach-Object
(别名,%
或foreach
),并输出全名。
gci . *.py -r| % {$_.FullName}
答案2
为了避免使用管道,您可以使用以下命令:
(gci -filter *.py -recurse).FullName