在Powershell中,我正在调用[io.path] :: GetExtension(..):
...| Select-Object {[io.path]::GetExtension($_)}
我得到以下输出:
[io.path]::GetExtension($_)
---------------------------
.dll
.dll
.dll
.dll
.dll
.dll
.dll
.dll
.dll
.dll
(注意某些输入缺少扩展名,因此输出为空)
对“Get-Member”的管道产生:
TypeName: Selected.System.String
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
[io.path]::GetExtension($_) NoteProperty System.String [io.path]::GetExtension($_)=
但是我想要 System.String ,而不是 Selected.System.String,,因为我想要Group-Object,而我(显然)不能将Selected分组。 System.String,因为它没有实现IComparable。
调用“.ToString()”不会抛出错误,但不会将其转换为字符串。
如何生成字符串,或将输出转换为字符串?
答案 0 :(得分:1)
要将输出打印为字符串,请尝试以下操作:
'C:\x.ini','C:\y.ini' | % { [io.path]::GetExtension($_) }
的.ini
的.ini
TypeName:System.String
在这种情况下,%或Foreach-Object将为每个输入运行命令,生成所需的输出。 Select-Object实际上会创建一个包含输出的选择对象。打印此对象的内容有很多种方法,但使用Foreach-Object可能是最简单的方法。
答案 1 :(得分:-1)
如果你正在处理字符串,我建议只使用正则表达式:
seek
这将返回$Paths -replace '.*?(\.\w+$)', '$1'
对象,其中包含[System.String[]]