至于现在我有脚本来查找文件-like '*ver1.0*'
,并且它工作正常。
$files = Get-ChildItem "D:\path\" | where {($_ -like "*$version*.sql")}
文件列表:
file_ver1.0_xx.sql file_ver1.0_xy.sql
但是现在我需要找到看起来像以前的文件,或者它比它更新。
例如,我需要查找包含模式的文件:*ver1.0*
或*ver0.9*
LastWriteTime
比任何*ver1.0*
文件更新。
答案 0 :(得分:1)
出于性能原因,我只列举文件一次,使用$version
确定文件的最新修改日期,然后过滤包含$version
的文件和具有不同版本但更新日期的文件:
$allFiles = Get-ChildItem 'D:\path' -Filter '*.sql' |
Where-Object { -not $_.PSIsContainer }
$refDate = $allFiles | Where-Object {
$_.BaseName -like "*$version*"
} | Sort-Object LastWriteTime | Select-Object -Last 1 -Expand LastWriteTime
$files = $allFiles | Where-Object {
$_.BaseName -like "*$version*" -or
($_.BaseName -notlike "*$version*" -and $_.LastWriteTime -gt $refDate)
}
如果你需要实际比较版本号,你可能需要一些更精细的方法,例如,像这样:
$pattern = 'ver(\d\.\d)'
$refVersion = [version]'1.0'
$allFiles = Get-ChildItem 'D:\path' -Filter '*.sql' |
Where-Object { -not $_.PSIsContainer }
$refDate = $allFiles | Where-Object {
$_.BaseName -match $pattern -and
[version]$matches[1] -eq $refVersion
} | Sort-Object LastWriteTime | Select-Object -Last 1 -Expand LastWriteTime
$files = $allFiles | Where-Object {
$_.BaseName -match $pattern -and
([version]$matches[1] -eq $refVersion -or
([version]$matches[1] -lt $refVersion -and $_.LastWriteTime -gt $refDate))
}
答案 1 :(得分:0)
我知道这很丑,但确实有效。
$files = Get-ChildItem "D:\path" | where {($_ -like "*$version*.sql")}
$files += Get-ChildItem "D:\path" | where {($_ -like "*.sql" -notlike "*$version*.sql" -and $_.LastWriteTime -gt $files[0].LastWriteTime)}