如何在 Powershell 中使用文件命名约定获取文件

Posted

技术标签:

【中文标题】如何在 Powershell 中使用文件命名约定获取文件【英文标题】:How to fetch the file with the file naming convention in Powershell 【发布时间】:2022-01-11 19:16:46 【问题描述】:

我想使用 powershell 脚本从目录中的其他文件列表中获取具有以下文件命名约定的今天的文件。需要匹配今天的日期和文件名。

TransferAA_MGH_20211206070920_xlsx.XLSX
TransferBB_MGH_20211206071130_xlsx.XLSX

我在下面尝试过,但它不起作用。 Get-ChildItem -Path Testfolder\*.XLSX | Where-Object $_.Name -match '(?:^|.*\D)(\d8)(?:\D.*|$)' -and $Matches[1] -eq ((Get-Date).Date) 感谢您的帮助。

【问题讨论】:

【参考方案1】:

这应该适合你:

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 语法用于将今天的日期正确格式化以进行比较。

【讨论】:

此代码正在获取与“Transfer[A-Z]2_MGH_[0-9]14_xlsx.XLSX”匹配的所有文件。但我只需要今天的文件。请提出建议。【参考方案2】:

这对我有用,你可以试一试。举个例子:

$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($_, '\d14').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, '\d14').Value,
        'yyyyMMddHHmmss',
        [cultureinfo]::InvariantCulture
    ).Date -eq $today

如果您希望过滤器更具限制性,您可以使用:

-Filter 'Transfer??_MGH_??????????????_xlsx.xlsx'

【讨论】:

以上是关于如何在 Powershell 中使用文件命名约定获取文件的主要内容,如果未能解决你的问题,请参考以下文章

如何验证XML架构中的命名约定

在 Python 中测试文件名是不是具有正确的命名约定

如何在运行时分隔字符串?

如何在 powershell 中使用变量调用命令?

在 PowerShell 中使用加号重命名文件

如何使用 4 部分命名约定在“更新统计”作业中调用链接服务器?