Windows批处理脚本复制在过去x分钟内修改的文件

Windows批处理脚本复制在过去x分钟内修改的文件,windows,powershell,batch-file,cmd,scripting,Windows,Powershell,Batch File,Cmd,Scripting,我是个脚本新手。我想在批处理脚本中复制最近x分钟内修改的文件。 在Linux中,有一个简单的命令来查找和复制在最近x分钟内修改的.zip文件 find /user/log/ *.log -mmin -180 -type f | cut -d '/' -f 5 | xargs tar -czvf /tmp/$name.tar.gz --directory=/user/log/ windows中是否有任何命令可用于复制在过去x分钟内修改的文件 由于.log文件不断被服务日志修改 或者如何使用fo

我是个脚本新手。我想在批处理脚本中复制最近x分钟内修改的文件。 在Linux中,有一个简单的命令来查找和复制在最近x分钟内修改的.zip文件

find /user/log/ *.log  -mmin -180 -type f | cut -d '/' -f 5 | xargs tar -czvf /tmp/$name.tar.gz --directory=/user/log/
windows中是否有任何命令可用于复制在过去x分钟内修改的文件

由于.log文件不断被服务日志修改
或者如何使用forfiles命令(以分钟或小时为单位)

这在PowerShell中相对容易

$ts = New-TimeSpan -Minutes 10
Get-ChildItem -File |
    Where-Object { $_.LastWriteTime -gt ((Get-Date) - $ts) }
要从cmd.exe运行此命令,您可以将上述代码放入扩展名为.ps1的文件中,并使用PowerShell调用它,也可以将其放入.bat脚本中。有很多这样做的例子在网上和周围

下面是一个更完整的脚本,可以根据您的问题进行复制。一旦您确信将复制正确的文件,请从Copy Item cmdlet中删除-WhatIf

请注意,这不是答案,它只是作为对已接受答案的支持而添加的

下面是一个直接从批处理脚本运行的PowerShell代码示例,使用别名进行了一些简化

@回音 Powershell-NoL-NoP-C&{$ts=newtimespan-m180^ GCI C:\MyDir\SubDir-Fi'*.zip'|{^ $\ LastWriteTime-gt Get Date-$ts}|^ %%{CpI$\.FullName'D:\Backups\MyLogs'-WhatIf} 暂停
只需更改第2行的分钟数,当前为180分钟,更改第3行的源.zip文件目录和第5行的目标目录。如果您对输出满意,请从第5行删除-WhatIf并删除第6行。

简单回答,没有命令直接使用cmd.exe的批处理文件。您需要检索文件修改时间戳,并使用其糟糕的算术函数计算当前时间减去x分钟,然后进行比较等。由于困难,我的建议是将PowerShell标记添加到您的问题中,并改为采用该路线。使用适当的/Max参数应该在一个镜头中执行。@ AlROC,直接从链接到的页面:/Max:N:最大文件年龄——排除大于N天/日期的文件。很难精确到几分钟,除非问题中的X是1440的倍数。这个命令只给了我新创建的文件。“我需要修改过的文件,我刚刚测试过,对我来说效果很好,@AbuSufian。”。你确定你复制的是正确的吗?它按修改时间过滤文件,因此没有理由只显示新文件,除非它们是在十分钟窗口中唯一修改的文件。@AbuSufian,如果项目是在最后x分钟内创建的,它们也被归类为在这段时间内被修改过,它们被从零修改为某物。如果您希望文件在x分钟前创建,但在最后x分钟内修改,那么您的问题应该更清楚。
$ts = New-TimeSpan -Minutes 180
Get-ChildItem -File -Filter '*.zip' |
    Where-Object { $_.LastWriteTime -gt ((Get-Date) - $ts) } |
    ForEach-Object {
        Copy-Item -Path $_ -Destination 'C:\new\dir' -WhatIf
    }