我一直在挑戰一個朋友做到以下幾點:訂單文件
「查找文件名的最後一個字符排序目錄列表的最快和最簡單的方式。」
他用下面的做到了在Linux上:
ls | rev | sort | rev
我想向他展示了PowerShell的選擇,但我纔剛剛開始學習PowerShell和我不能做到這一點。所以,我在欺騙並尋求你的幫助。
我一直在挑戰一個朋友做到以下幾點:訂單文件
「查找文件名的最後一個字符排序目錄列表的最快和最簡單的方式。」
他用下面的做到了在Linux上:
ls | rev | sort | rev
我想向他展示了PowerShell的選擇,但我纔剛剛開始學習PowerShell和我不能做到這一點。所以,我在欺騙並尋求你的幫助。
這裏是我的條目:
ls | sort {"$_"[-1]}
,並獲得病理:
ls|sort{"$_"[-1]}
我在每個答案中都試過代碼,它們都可以工作,但是這個代碼有最短的語法。我無法確定某個版本是否比其他版本更快,這需要在包含大量文件的文件夾中對其進行計時。 – Bratch 2009-12-11 01:28:40
不幸的是,Powershell沒有一個很好的簡單的反向方法,所以你必須得到字符串的最後一個字母並按此排序。這是一個方式,我已經做到了:
dir| sort {$_.name.Substring($_.name.length-1)}
正如已經指出的那樣,這將嚴格排序只有最後一個字母,而我在Linux版本將通過最後再用的後續字母排序,所以有這可能是一個更好的方法,或者如果你想這樣做,你可能不得不引入一些循環。
這真是太棒了。不像Linux的替代品那麼短,但仍然非常好。 – 2009-12-04 10:29:55
我也注意到,這隻能按最後一個字母排序,與linux版本不同。然而,挑戰是「由最後的性格」表達的,所以這個答案回答了這個問題,即使這兩個解決方案不相同。 – 2009-12-04 10:48:44
嗯,不是'sort-descending'函數作爲反向選擇嗎? – 2014-01-06 23:06:57
dir | sort -Property @{Expression ={$n = $_.Name.ToCharArray(); [Array]::Reverse($n);[String]::Join("",$n)}}
不一樣短UNIX版本,主要是因爲沒有在.NET Framework中的String.Reverse()函數。基本上這是通過告訴sort'通過在輸入參數上計算這個表達式來排序'來工作的。
現在,如果任何UNIX外殼確實優於
dir | sort -Property Length -Descending
打印所有與最大的一個第一文件,我很想看到它。
dir |排序{$ _。name [-1]}
Shay's variant通過索引字符串的方式比接受的答案短,但即使這樣也可以改進。您可以縮短甚至通過排除不必要的空格和使用更短的別名更多:
ls|sort{$_.Name[-1]}
您也可以使用(略)-Name
參數Get-ChildItem
:
ls -n|sort{$_[-1]}
這將直接返回字符串。
如果你真的想通過反向串排序,那麼下面的工作(但速度較慢):
ls -n|sort{$_[3e3..0]}
你可以讓它更快一點,如果你有一個上限的文件名的長度。
dir|select Name,@{
L="R";
E={[char[]]$R=$_.Name;
[system.array]::reverse($R);
$R -join($null)
}
}|sort R
在任何人票對遷移這個問題,看看這個:HTTP://meta.stackexchange .com/questions/32471 /想知道爲什麼我遷移了 – raven 2009-12-10 16:19:53