包含迁移脚本的文件夹包含 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
我想获得所有独特的文件的日期/时间部分。示例文件夹应导致:
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
如何修复?
我看到两个选择:
up
(更好)在检查唯一性和排序之前,删除基本名称中日期时间部分之后的内容,或者在之后的内容(2015-03-23.19-00.up.staging
变为2015-03-23.19-00
,或者2015-03-23.19-00.up
)。为此,我不知道如何有效地注入第二行来实现这一点。- (可以接受)不要将带有后面内容的文件包含在集合
up
中$Files
。为此,我还没有找到如何将此条件传递到-Filter
第一行的参数中的方法。
答案1
这能满足你的需要吗?
$Files | % {
$_.Substring(0,16)
} | Sort -Unique