PowerShell如何使用Get-ChildItem筛选含指定日期的Zip文件
解决方法
你的代码问题在于:
- 使用
-match时仅返回布尔值(匹配成功/失败),没有输出文件路径 -contains是用于检查集合是否包含指定元素的运算符,不适合用来判断字符串是否包含子串
以下是几种正确实现方式:
方式一:精准过滤文件名并提取完整路径
$date = (Get-Date).ToString('yyyyMMdd') # 仅匹配文件名中包含指定日期的zip文件,提取完整路径 $zipPath = Get-ChildItem -Path $path -Filter '*.zip' -Recurse | Where-Object { $_.Name -match $date } | Select-Object -ExpandProperty FullName
方式二:简化写法直接筛选路径
$date = (Get-Date).ToString('yyyyMMdd') $zipPath = (Get-ChildItem -Path $path -Filter '*.zip' -Recurse).FullName | Where-Object { $_ -match $date }
方式三:更严格的日期格式匹配(可选)
如果需要确保匹配的是恰好8位数字的日期格式(避免误匹配包含更长数字串的文件名),可以用正则表达式限定:
$date = (Get-Date).ToString('yyyyMMdd') # 正则确保日期是独立的8位数字(前后可以是任意非数字或字符串首尾) $zipPath = Get-ChildItem -Path $path -Filter '*.zip' -Recurse | Where-Object { $_.Name -match "(?:^|\D)$date(?:\D|$)" } | Select-Object -ExpandProperty FullName
关键说明:
-Filter '*.zip'先筛选所有zip文件,比后续再过滤更高效- 使用
$_.Name而非FullName可以避免路径中包含的日期干扰筛选结果 -match支持正则匹配,适合灵活的字符串匹配场景
内容的提问来源于stack exchange,提问作者eagerdev
相关产品推荐
相关产品推荐

