我想使用 powershell 腳本從目錄中的其他檔案串列中獲取具有以下檔案命名約定的今天的檔案。需要匹配今天的日期和檔案名。
TransferAA_MGH_20211206070920_xlsx.XLSX
TransferBB_MGH_20211206071130_xlsx.XLSX
我在下面嘗試過,但它不起作用。
Get-ChildItem -Path Testfolder\*.XLSX | Where-Object {$_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)' -and $Matches[1] -eq ((Get-Date).Date)
謝謝您的幫助。
uj5u.com熱心網友回復:
這應該適合你:
Get-ChildItem -Path Testfolder\*.XLSX |
Where-Object {$_.Name -cmatch 'Transfer[A-Z]{2}_MGH_[0-9]{14}_xlsx.XLSX' -and $Matches[1] -like (Get-Date -Format "yyyyMMdd").Date}
打破regex模式:
Transfer- 文字串[A-Z]{2}- 兩個大寫字母_MHM_- 文字串[0-9]{14}- 14 位數字_xlsx.XLSX- 文字串
而(Get-Date -Format "yyyyMMdd").Date語法用于獲取正確格式化的今天日期以進行比較。
uj5u.com熱心網友回復:
這對我有用,你可以試一試。舉個例子:
$today = [datetime]::Today
@'
TransferAA_MGH_20211206070920_xlsx.XLSX
TransferBB_MGH_20211206071130_xlsx.XLSX
TransferAA_MGH_20211205070920_xlsx.XLSX
TransferBB_MGH_20211205071130_xlsx.XLSX
TransferAA_MGH_20211204070920_xlsx.XLSX
TransferBB_MGH_20211204071130_xlsx.XLSX
'@ -split '\r?\n' | Where-Object {
[datetime]::ParseExact(
[regex]::Match($_, '\d{14}').Value,
'yyyyMMddHHmmss',
[cultureinfo]::InvariantCulture
).Date -eq $today
}
# Results:
TransferAA_MGH_20211206070920_xlsx.XLSX
TransferBB_MGH_20211206071130_xlsx.XLSX
因此,您的搜索將如下所示:
# This filter seem to work OK while testing
Get-ChildItem -Path . -Filter '*_*_??????????????_????.xlsx'
# So:
$today = [datetime]::Today
Get-ChildItem -Path 'path/to/TestFolder' -Filter '*_*_??????????????_????.xlsx' |
Where-Object {
[datetime]::ParseExact(
[regex]::Match($_.BaseName, '\d{14}').Value,
'yyyyMMddHHmmss',
[cultureinfo]::InvariantCulture
).Date -eq $today
}
如果您希望過濾器更具限制性,您可以使用:
-Filter 'Transfer??_MGH_??????????????_xlsx.xlsx'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374212.html
