【发布时间】:2021-07-27 15:23:00
【问题描述】:
我正在尝试从文件名中提取两个单词。名称的格式为:
__XXXXXXXX_XXX_XXXXXXX_XXXX_XXXXX_XXXX XXX_Aircraft 017_XXXXXXXX-XXXXXXX_XXXXXXX-XXXXXXX-XXXXXX-01Apr2021-XXXXX
X 被替换为不同的单词。我需要提取飞机编号和日期,以便仅使用该信息重命名文件。使用此站点的帮助,我尝试了以下方法来隔离飞机编号:
$names = gci -Path "H:\Path\to\Logs" *.log -Recurse | select @{n="Name"; e={if ($_.Name -match "Aircraft (\w+)") {
$matches[1] }}}
但是,它似乎没有给我我需要的匹配。但是,我在编程方面非常不熟练,可能会走错路。我希望用于隔离飞机编号的相同逻辑也适用于日期。
【问题讨论】:
-
根据您的示例,您想提取 Aircraft 017 还是仅提取 017 和 01Apr2021 对吗?
-
飞机 017 比 017 更可取,但两者都可以。
-
您正在测试整个
.Name是否与您的模式匹配。这将在找到匹配项时为您提供整个.Name。如果您只想要项目的一部分,则需要将其拆分,然后抓取您想要的部分。 -
我如何分割它并抓住那部分?我只有大约一个月的轻型 powershell 经验。
-
您已经获取了一个感兴趣的部分,并通过
$Matches[1]访问它;您只需要扩展正则表达式以获取另一个,并通过$Matches[2]访问它,如我的回答所示。
标签: powershell extract filenames