簡體   English   中英

Windows Batch腳本復制最近x分鍾內修改的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM