Windows Batch脚本复制最近x分钟修改的文件

时间:2018-03-23 23:53:35

标签: 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文件经常被服务日志修改 或者我如何在分钟或小时内使用forfiles命令

2 个答案:

答案 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行。