包含迁移脚本的文件夹具有如下所示的SQL和PHP文件组合:
2015-03-22.23-00.up.sql 2015-03-23.19-00.up.development.sql 2015-03-23.19-00.up.production.sql 2015-03-23.19-00.up.sql 2015-03-23.19-00.up.staging.sql 2015-03-27.14-00.up.php
我想获得文件的所有独特date/时间部分的列表。 示例文件夹应导致:
2015-03-22.23-00.up 2015-03-23.19-00.up 2015-03-27.14-00.up
注:最多的部分可能包括也可能不包括在内。
我已经拿出这个代码:
$Files = Get-ChildItem -Filter '*.up.*' -File $Files = $Files | Select BaseName -Unique | Sort-Object BaseName foreach($File in $Files) { $RegEx = '(.*)\.up'; $FileSchemaVersion = $File.BaseName -replace $RegEx,'$1' Write-Line $File # Do something }
不幸的是,它包括了开发,生产,升级。 所以实际结果是:
2015-03-22.23-00.up 2015-03-23.19-00.up.development 2015-03-23.19-00.up.production 2015-03-23.19-00.up 2015-03-23.19-00.up.staging 2015-03-27.14-00.up
如何解决这个问题?
我看到两个选项:
2015-03-23.19-00.up.staging成为2015-03-23.19-00 ,或者2015-03-23.19-00.up在检查唯一性和sorting之前。 为此,我不知道如何有效地注入第二行来实现这一点。 $Files集合中包含$Files 。 为此,我还没有find如何将这个条件传递到第一行的-Filter参数的方法。 这是否符合您的需求?
$Files | % { $_.Substring(0,16) } | Sort -Unique