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