[英]Windows Batch script copy the files modified in last x minutes
我是脚本新手。 我想将最近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脚本中。 有许多在SO和网络上执行此操作的示例。
这是一个更完整的脚本,可以根据您的问题进行复制。 一旦确定要复制正确的文件,请从Copy-Item
cmdlet中删除-WhatIf
。
$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
}
请注意,这不是答案,它只是作为对已接受答案的支持而添加的。
这是直接从批处理脚本运行的lit的PowerShell代码示例(使用别名进行了一些简化) 。
@Echo Off
Powershell -NoL -NoP -C "&{$ts=New-TimeSpan -M 180;"^
"GCI "C:\MyDir\SubDir" -Fi '*.zip'|?{"^
"$_.LastWriteTime -gt ((Get-Date)-$ts)}|"^
%%{CpI $_.FullName 'D:\Backups\MyLogs' -WhatIf}}"
Pause
只需更改第2
行的分钟数(当前为180
分钟) ,源( .zip
文件) ,第3
行的目录和第5
行的目标目录。 如果您对输出感到满意,请从第5
行中删除-WhatIf
并删除第6
行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.