按Powershell中文件名的最后一个字符排序文件

时间:2009-12-04 09:20:41

标签: powershell

我被朋友挑战,要做以下事情:

“找到按文件名的最后一个字符排序目录列表​​的最快捷最简单的方法。”

他是在Linux上使用以下内容完成的:

ls | rev | sort | rev 

我想向他展示powershell的替代方案,但我只是刚刚开始学习powershell而我无法做到。所以,我在欺骗并寻求你的帮助。

6 个答案:

答案 0 :(得分:8)

这是我的参赛作品:

ls | sort {"$_"[-1]}

并获得病态:

ls|sort{"$_"[-1]}

答案 1 :(得分:5)

不幸的是,Powershell没有一个很好的简单反向方法,所以你必须得到字符串的最后一个字母并按此排序。这是我做过的一种方式:

dir| sort {$_.name.Substring($_.name.length-1)}

正如已经指出的那样,这将严格按最后一个字母排序,而我的Linux版本将按最后一个字母和后续字母排序,因此可能有更好的方法来执行此操作,或者您可能需要如果你想要这样,就会引入一些循环。

答案 2 :(得分:4)

DIR |排序{$ _。名称[-1]}

答案 3 :(得分:4)

通过索引字符串,

Shay's variant比接受的答案短,但即便如此也可以改进。您可以通过排除不必要的空格并使用较短的别名来缩短它:

ls|sort{$_.Name[-1]}

此外,您可以使用(缩写)-Name参数Get-ChildItem

ls -n|sort{$_[-1]}

将直接返回字符串。

如果你真的想按 reverse 字符串排序,那么以下工作(但速度很慢):

ls -n|sort{$_[3e3..0]}

如果文件名的长度有上限,则可以加快速度。

答案 4 :(得分:0)

dir | sort -Property @{Expression ={$n = $_.Name.ToCharArray(); [Array]::Reverse($n);[String]::Join("",$n)}}

不像unix版本那么简短,主要是因为.NET Framework中没有String.Reverse()函数。基本上,这可以通过在输入参数上计算这个表达式来排序'排序'。


现在,如果任何unix shell比

更好
dir | sort -Property Length -Descending

首先打印所有文件中最大的文件,我很有兴趣看到它。

答案 5 :(得分:0)

dir|select Name,@{
   L="R";
   E={[char[]]$R=$_.Name;
   [system.array]::reverse($R);
   $R -join($null)
}
}|sort R