Powershell:具有紧凑输出的gci滤波器


0

我希望递归地找到文件,为此我正在使用

> gci -name -filter *.py -r

选项 -name 仅提供文件名,以便根据需要为每个找到的项找到一行。但是我作为输出得到的项目仅显示相对路径,例如

python\scr.py

(现在的目录是 C:\python )虽然有类似的命令 cmd.exe

> where /r . *.py

C:\data\python\scr.py

如所想。

有没有办法解决这个问题 gci

我想用正则表达式/最小化管道/ greping。

Answers:


1

我不知道为什么你不喜欢滚动,因为它可以说是PowerShell最重要的功能,但我会忽略 -name 参数。然后,使用 Select-Object (别名, select )获取FileInfo对象的FullName,并使用 -expand 切换到仅输出FullName属性的字符串值。如果你想保持简短,你也可以省略 -filter 并添加' . ',因为第二个位置参数是 -Filter

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

或者使用 Foreach-Object (别名, % 要么 foreach ),并输出FullName。

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

1
gci -filter *.py -r| select -expand fullname 可能比你的第二个选项更干净,这可能是OP正在寻找的。
zdan

是的,我认为你是对的@zdan。我将把这个开关添加到第一个例子。
Rynant

两种选择都可以。
sancho.s

0

为避免使用管道,您可以使用以下内容:

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

这不起作用,在Rynant给出的两个选项都起作用的同一提示下。
sancho.s

@ sancho.s,答案应该适用于PowerShell v3及更高版本。
Rynant

@Rynant - 这可能是原因,我想我有v2(按照 >$PSVersionTable.psversion
sancho.s
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.