我有一个目录列表,其格式类似于版本号,并希望找到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我在单元测试中创建的版本正确排序.
实际上,您可以对表达式进行排序,这将保留原始对象.
Get-ChildItem $path |
Sort-Object { $_.Name -as [Version] } |
Select-Object -Last 1 |
Remove-Item
Run Code Online (Sandbox Code Playgroud)
会做的伎俩.
希望这可以帮助,
| 归档时间: |
|
| 查看次数: |
2636 次 |
| 最近记录: |