我是脚本新手。我想在批处理脚本中复制最近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
命令
答案 0 :(得分:4)
这在PowerShell中相对容易。
$ts = New-TimeSpan -Minutes 10
Get-ChildItem -File |
Where-Object { $_.LastWriteTime -gt ((Get-Date) - $ts) }
要从cmd.exe运行此命令,您可以将上面的代码放入扩展名为.ps1
的文件中,并使用PowerShell调用它,或将其放入.bat脚本中。在SO和网络上有很多这样做的例子。
这是一个更完整的脚本,可以根据您的问题进行复制。如果您确信要复制正确的文件,请从-WhatIf
cmdlet中删除Copy-Item
。
$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
}
答案 1 :(得分:0)
注意这不是一个答案,它只是作为对已接受答案的支持而添加。
以下是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
只需更改分钟数(目前180
),在2
行,来源,(.zip
个文件),第3
行上的目录和第5
行上的目标目录。如果您对输出感到满意,请从第-WhatIf
行移除5
并删除第6
行。