在过去 1 分钟创建的文件中查找特定单词的 Powershell 脚本
Posted
技术标签:
【中文标题】在过去 1 分钟创建的文件中查找特定单词的 Powershell 脚本【英文标题】:Powershell script that looking for specific word in file which created in last 1 Min 【发布时间】:2021-12-26 02:14:38 【问题描述】:刚刚编写了 Powershell 脚本,该脚本将在子文件夹中查找名称中包含“.doc_”的文件,该文件在 1 分钟前创建,然后将其移动到另一个子文件夹。
当我运行 powershell 脚本时,它会移动名称中包含“.doc_”的文件,该文件是在 1 分钟前创建的,但它也会移动名称中包含“.doc_”的相同文件,该文件是几天前创建的,即不需要。
请告诉我为什么我的代码会考虑超过 1 分钟的文件
get-childitem -Path "C:\Users\Administrator\Desktop\Test\Test2" | where-object $_.Name -match ".doc_" -and $_.LastWriteTime -lt (get-date).Adddays(-0) -and $_.LastWriteTime -lt (get-date).AddMinutes(-1)| move-item -destination "C:\Users\Administrator\Desktop\Test"
【问题讨论】:
【参考方案1】:简而言之,您对Get-Date
的过滤器是错误的,因为它会在一分钟前 抓取所有内容。这是由于 -lt
运算符造成的,如果您将其与 -gt
运算符交换,它应该可以工作。
好的,下一题。由于您实际上不是在文件中搜索特定单词,而是在文件名中搜索,我们可以使用 FileSystem 提供程序来过滤该文件名,我们将牺牲 RegEx (using -match), 到使用通配符表达式;这将使速度提高 40 倍,因为通过管道发送任何东西都非常昂贵:
Get-ChildItem -Path "C:\Users\Administrator\Desktop\Test\Test2" -Filter "*.doc_*" |
where-object $_.LastWriteTime -gt (Get-Date).AddMinutes(-1) |
Move-Item -Destination "C:\Users\Administrator\Desktop\Test"
如果时间至关重要,我们可以尝试使用 grouping 运算符 ( .. )
和 .Where()
运算符/方法来避开管道。
(Get-ChildItem -Path "C:\Users\Administrator\Desktop\Test\Test2" -Filter "*.doc_*").Where
$_.LastWriteTime -gt (Get-Date).AddMinutes(-1)
| Move-Item -Destination "C:\Users\Administrator\Desktop\Test"
【讨论】:
哇,这么多信息和专业的回复非常感谢亚伯拉罕 Zinala!!!以上是关于在过去 1 分钟创建的文件中查找特定单词的 Powershell 脚本的主要内容,如果未能解决你的问题,请参考以下文章