Schalter für 7zip CLI (7za), um die Änderungszeit extrahierter Dateien auf jetzt festzulegen?

Schalter für 7zip CLI (7za), um die Änderungszeit extrahierter Dateien auf jetzt festzulegen?

Momentan ruft mein Serverdienst auf, 7zaum Archivdateien wie diese zu extrahieren:

7za x "file" -o"output folder"

Es gibt ein Problemaufgrund eines serverkonformen Windows-Bereinigungsdienstes, der alle Dateien löscht, die älter als eine Stunde im Ausgabeordner sind. Änderungen am Dienst sind ebenfalls keine Option.

Alle Dateien im Ausgabeordner werden automatisch jede Minute gelöscht, so dass manchmal selbst Benutzer, die in diesen Ordner extrahieren, aufgrund der Zeit und des jede Minute ausgeführten Bereinigungsprozesses nicht auf die extrahierten Dateien zugreifen können.

Frage:Gibt es einen Schalter, mit dem 7zip angewiesen werden kann, die Änderungszeit der extrahierten Datei(en) [jetzt] auf die aktuelle Zeit statt auf die Zeit der Dateien im Archiv zu setzen?

Antwort1

Als Workaround-AnsatzUm dieses Problem zu beheben, ist es möglich, die Änderungsdatumsattribute der Dateien zu ändern, nachdem sie an einen temporären Speicherort extrahiert und anschließend verschoben wurden.

Sie können die Dateien über 7za in einen temporären Ordner extrahieren, die Änderungsdatumswerte der extrahierten Dateien an den aktuellen Datums- und Zeitstempel anpassen, sie an das endgültige Ziel verschieben und dann die temporären Dateien/Ordner bereinigen.

Legen Sie einfach den vollständigen Pfad der Archivdatei mit dem $fileVariablenwert fest. Legen Sie außerdem den vollständigen Pfad des endgültigen Zielordners mit dem Variablenwert fest, der $destauf den Speicherort verweist, der den Dienst enthält, der jede Minute Dateien löscht, die älter als ein bestimmtes Alter sind.

Power Shell

$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;

Unterstützende Ressourcen

verwandte Informationen