在过去 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 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用熊猫在特定列中的csv文件中查找特定单词

在文本文件中查找特定单词并计算它

查找列表/文件中以特定前缀/后缀开头/结尾的所有单词

在文本文件中查找特定单词

如何使用特定字符串从过去 10 分钟的日志文件中获取行

正则表达式在字符串中任何特定单词之前和之后查找特定单词