¿Cambiar a 7zip CLI (7za) para establecer la hora de modificación de los archivos extraídos ahora?

¿Cambiar a 7zip CLI (7za) para establecer la hora de modificación de los archivos extraídos ahora?

En este momento, el servicio de mi servidor está llamando 7zapara extraer archivos como este:

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

hay un problemadebido a un servicio de limpieza de Windows de cumplimiento del servidor que purga todos los archivos que tienen más de una hora en la carpeta Salida. Realizar cambios en el servicio tampoco es una opción.

Todos los archivos en la carpeta Salida se eliminan automáticamente cada minuto, por lo que a veces incluso los usuarios que extraen a esta carpeta no pueden acceder a los archivos extraídos debido al tiempo y al proceso de limpieza que se ejecuta una vez cada minuto.

Pregunta:¿Hay algún interruptor para indicarle a 7zip que establezca la hora de modificación de los archivos extraídos en [ahora] la hora actual en lugar de la hora de los archivos dentro del archivo?

Respuesta1

Como solución alternativaPara solucionar este problema, es posible cambiar los atributos de fecha de modificación de los archivos una vez que se extraen a una ubicación temporal y luego moverlos.

Puede extraer los archivos a una carpeta temporal a través de 7za, ajustar los valores de fecha de modificación de los archivos extraídos para que sean la fecha y hora actual, moverlos al destino final y luego limpiar los archivos/carpeta temporales.

Simplemente configure la ubicación de la ruta completa del archivo comprimido con el $filevalor de la variable. Además, establezca la ubicación de la ruta completa de la carpeta de destino final con el $destvalor de la variable apuntándolo a la ubicación que tiene el servicio que purga los archivos que contiene cada minuto con una antigüedad determinada.

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

Recursos de apoyo

información relacionada