我被朋友挑战,要做以下事情:
“找到按文件名的最后一个字符排序目录列表的最快捷最简单的方法。”
他是在Linux上使用以下内容完成的:
ls | rev | sort | rev
我想向他展示powershell的替代方案,但我只是刚刚开始学习powershell而我无法做到。所以,我在欺骗并寻求你的帮助。
答案 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