在PowerShell中删除最旧版本的目录

jon*_*nii 3 powershell

我有一个目录列表,其格式类似于版本号,并希望找到N个最旧的目录并删除它们.例如:

/1.2.3.4
/1.2.3.5
/1.2.3.6
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些东西,但我似乎无法到达我需要去的地方.

我的第一次尝试是这样的:

ls directory | sort Name | select -first 5 | rm -r
Run Code Online (Sandbox Code Playgroud)

但是我不确定这会在所有情况下都有效,因为这会(我猜)会做一个自然的事情.这总是会返回正确的结果吗?

我的下一个想法是我可以System.Version用来做我的排序.所以我最终得到了这个:

ls directory | %{[System.Version]$_.Name } | sort | select -first 5 | ???
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何将目录结果与排序联系起来......最好的方法是什么?

gci \\directory 产生

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        12/19/2011   5:19 PM            1.0.1052.54849
d----        12/19/2011   5:29 PM            1.0.1053.54850
d----        12/19/2011   5:36 PM            1.0.1054.54851
d----        12/20/2011   2:11 PM            1.0.1056.54875
d----        12/12/2011  10:39 AM            1.0.991.54625
d----        12/12/2011  12:08 PM            1.0.992.54627
d----        12/12/2011  12:22 PM            1.0.993.54628
d----        12/12/2011   1:15 PM            1.0.994.54630
d----        12/12/2011   2:45 PM            1.0.996.54636
d----        12/12/2011   3:34 PM            1.0.997.54640
d----        12/12/2011   3:48 PM            1.0.998.54641
Run Code Online (Sandbox Code Playgroud)

gci \\directory | Sort-Object { $_Name -as [Version] } 产生

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        12/12/2011   1:15 PM            1.0.994.54630
d----        12/12/2011  12:22 PM            1.0.993.54628
d----        12/12/2011   2:45 PM            1.0.996.54636
d----        12/12/2011   3:48 PM            1.0.998.54641
d----        12/12/2011   3:34 PM            1.0.997.54640
d----        12/12/2011  12:08 PM            1.0.992.54627
d----        12/19/2011   5:29 PM            1.0.1053.54850
d----        12/19/2011   5:19 PM            1.0.1052.54849
d----        12/19/2011   5:36 PM            1.0.1054.54851
d----        12/12/2011  10:39 AM            1.0.991.54625
d----        12/20/2011   2:11 PM            1.0.1056.54875
Run Code Online (Sandbox Code Playgroud)

这是一个网络共享是否重要?我很困惑为什么这不起作用...我做了一个快速的健全性检查,Array.Sort我在单元测试中创建的版本正确排序.

Sta*_*ing 7

实际上,您可以对表达式进行排序,这将保留原始对象.

Get-ChildItem $path  |
    Sort-Object { $_.Name -as [Version] } |
    Select-Object -Last 1 |
    Remove-Item
Run Code Online (Sandbox Code Playgroud)

会做的伎俩.

希望这可以帮助,

  • Select-Object和Group-Object也是如此.当你在一个完整的船舶周期中为产品团队工作然后找到一家专门研究该语言的公司时,你会学到一件事或一千件事:-)这绝对是我最喜欢的核心PowerShell cmdlet的角落和缝隙之一.这个旧视频涵盖了我最喜欢的-Object集:http://channel9.msdn.com/Blogs/philpenn/PowerShell--Object-Family-of-CmdLets-and-the-Object-Pipeline (2认同)