string - 使用多个字符串和日期条件定位文件
问题描述
我正在尝试使用如下代码来查找具有特定字符串、扩展名和 lastwritetime 的文件:
get-childitem C:\users\nila9\Downloads -filter *.mkv -recurse
| where-object { $_.Name -match ("*bluray*" -and "*1080*") -and $_.lastwritetime -match "11/20/2020" }
该代码旨在首先过滤下载文件夹中具有扩展名的所有文件,*.mkv
然后进一步筛选包含字符串“bluray”和“1080”并在指定日期之后修改的文件名。
虽然此代码不会返回任何错误,但它不会执行并将控制权释放到提示符处。
有什么地方我弄错了吗?
谢谢
解决方案
正如Lee_Dailey指出的那样,-match
使用正则表达式并且需要不同的语法。您的代码需要一个不同的运算符来处理通配符 ( *
),为此,有-like
此外,您不应该尝试将 DateTime 对象与字符串进行比较,因此-match
也无济于事。
如果文件名需要 BOTH bluray
AND 1080
,您可以将代码更改为
$refDate = (Get-Date -Year 2020 -Month 11 -Day 20).Date # set time part to all 0 (--> midnight)
Get-ChildItem -Path 'C:\users\nila9\Downloads' -Filter '*.mkv' -Recurse |
Where-Object { $_.Name -like "*bluray*" -and $_.Name -like "*1080*" -and $_.LastWriteTime -ge $refDate }
但是,如果文件需要在其名称中包含bluray
OR , 则可以在该部分使用:1080
-match
$refDate = (Get-Date -Year 2020 -Month 11 -Day 20).Date # set time part to all 0 (--> midnight)
Get-ChildItem -Path 'C:\users\nila9\Downloads' -Filter '*.mkv' -Recurse |
Where-Object { $_.Name -match "bluray|1080" -and $_.LastWriteTime -ge $refDate }
正则表达式中的管道符号|
是 OR 运算符
推荐阅读
- javascript - 我们如何才能只使用特定路径的 electron.protocol.interceptFileProtocol ,而不影响其他请求?
- angular - 更改组件属性中的值不会触发更改检测?但是单击组件时有效吗?
- mongodb - 如何将 luxon 时区功能加载到 mongo shell
- javascript - 基于文件名的自动完成建议
- javascript - 如何防止 IE11 中 requestAnimationFrame() 闪烁?
- c++ - c++朋友运算符模板特化
- random - 有没有办法从 HTML 表格中选择一个随机单元格并更改其背景颜色?
- mysql - Sails.js 无法从其他模型的生命周期中创建另一个模型中的数据
- android - Crashlytics 报告垃圾收集器内部的 Android 应用程序崩溃
- ruby-on-rails - 如何更改使用 Docker for Windows 创建的 Gemfile 的权限?