%2C%20um%20die%20%C3%84nderungszeit%20extrahierter%20Dateien%20auf%20jetzt%20festzulegen%3F.png)
Momentan ruft mein Serverdienst auf, 7za
um 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 $file
Variablenwert fest. Legen Sie außerdem den vollständigen Pfad des endgültigen Zielordners mit dem Variablenwert fest, der $dest
auf 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
- Verabredung bekommen
- Neuer Gegenstand
- Start-Prozess
- Arrays
- Untergeordnetes Element abrufen
- ForEach-Objekt
StandardAliasefür Foreach-Objekt: das
%
Symbol ' ', ForEach - Wenn
- Setze ItemProperty
- Kopiere Artikel
- Gegenstand entfernen