powershell - 以正确的顺序对文件进行排序
问题描述
我想以正确的顺序对某些文件进行排序,以便稍后使用网格选择它们。为此,我使用以下命令:
$choose = Get-ChildItem $environment\Aither\Srv\Ptah\Tables\*.sql -Filter "*patch_5*.sql" -File |
# sorted by a calculated name
Sort-Object { if ($_.BaseName -match '(.+-RC)(\d+)$') { '{0}{1:D3}{2}' -f $matches[1], [int]$Matches[2], $_.Extension }
else { '{0}-RC999{1}' -f $_.BaseName, $_.Extension } } |
Out-GridView -Title "Select your files" -OutputMode Multiple
$choose
我得到:
通过将 RC 文件放在没有它们的文件之后,文件可以很好地排序。但是,我有一个问题,旧文件放错了位置,我想知道是否可以对它们进行排序,同时将 RC 放在后面。
之前的示例:patch_5.0.10;补丁_5.0.11;补丁_5.0.5;... 补丁_5.1.0-RC2 ;
所需示例:patch_5.0.5;补丁_5.0.10;补丁_5.0.11;...补丁_5.1.0-RC2;
解决方案
您需要指定一个计算出来的文件名以进行排序。
根据您可能有多少次修订,我想对这些数字进行正确排序也很重要。
假设您有一组文件(没有排序)在 gridview 中看起来像这样:
然后按照你想要的方式排序,并在数字上正确,你需要做这样的事情:
Get-ChildItem 'D:\Test' -Filter "*patch_5*.sql" -File |
# sort by a calculated name
Sort-Object { if ($_.BaseName -match '(.+-RC)(\d+)$') { '{0}{1:D3}{2}' -f $matches[1], [int]$Matches[2], $_.Extension }
else { '{0}-RC999{1}' -f $_.BaseName, $_.Extension } } |
Out-GridView -Title "Select your files" -OutputMode Multiple
GridView 中的输出:
以上假设您没有超过 998 个修订版。如果您有更多,请更改{1:D3}
为块中的更高位数{1:D4}
,if
并将硬编码更改RC999
为同样最高的数字,例如RC9999
推荐阅读
- xamarin - 用户升级到 iOS 13 后 Xamarin iOS 应用程序崩溃
- css - 媒体查询不起作用的通讯信函模板
- python - 断言未能从“i in range(x)”中捕获 i
- java - 如何序列化子类型,就好像它是杰克逊的超级类型
- c - 事件队列清理
- angular - 依赖于“nativescript-angular/router”中的 RouterExtensions 进行导航的单元测试组件
- azure - 播放从 Azure 语音翻译获得的 byte[] 音频
- forms - Symfony - 表单未提交
- shell - 如果找到数字模式,则从文件中删除行
- java - Java循环中的内存分配