%20%E5%B0%87%E8%A7%A3%E5%A3%93%E7%B8%AE%E6%AA%94%E6%A1%88%E7%9A%84%E4%BF%AE%E6%94%B9%E6%99%82%E9%96%93%E8%A8%AD%E5%AE%9A%E7%82%BA%E7%8F%BE%E5%9C%A8%EF%BC%9F.png)
現在我的伺服器服務正在呼叫7za
提取存檔文件,如下所示:
7za x "file" -o"output folder"
有問題由於伺服器合規性 Windows 清理服務會清除輸出資料夾中超過一小時的所有檔案。改變服務也不是不可行的選擇。
輸出資料夾中的所有檔案每一分鐘就會自動刪除一次,因此有時即使是提取到該資料夾的使用者也無法存取提取的文件,因為時間和每分鐘運行一次的清理進程。
問題:是否有開關告訴 7zip 將提取檔案的修改時間設定為 [now] 目前時間,而不是存檔中檔案的時間?
答案1
作為解決方法對於此問題,可以在將檔案提取到臨時位置後更改檔案的日期修改屬性,然後再移動它們。
您可以透過 7za 將檔案提取到臨時資料夾,將提取的檔案的日期修改值調整為當前日期時間戳,將它們移至最終目的地,然後清理臨時檔案/資料夾。
只需使用變數值設定存檔檔案的完整路徑位置即可$file
。此外,設定最終目標資料夾的完整路徑位置,並使用$dest
變數值將其指向具有每隔一分鐘清除超過特定期限的檔案的服務的位置。
電源外殼
$file = "C:\Folder\Path\File.zip"
$dest = "C:\Final\Destination\FolderPath"
$now = Get-Date
$nowf = "$($Env:Temp)\$((Get-Date).ToString("yyyyMMdd_hhssmmmtt"))"
New-Item -ItemType Directory -Force -Path $nowf
Start-Process "C:\Program Files\7-Zip\7za.exe" -ArgumentList "x $file -o$nowf" -NoNewWindow -Wait
$i = Get-ChildItem -Path $nowf -File -Recurse
$i | % { Process {
If (Test-Path $_.FullName){
Set-ItemProperty -Path $_.FullName -Name LastWriteTime -Value $now
Copy-Item -Path $_.FullName -Destination $dest -Force
}
}};
Remove-Item -Path "$nowf" -Force -Recurse;