Переключиться на 7zip CLI (7za), чтобы установить время изменения извлеченных файлов на текущее?

Переключиться на 7zip CLI (7za), чтобы установить время изменения извлеченных файлов на текущее?

Прямо сейчас мой серверный сервис вызывает 7zaизвлечение архивных файлов следующим образом:

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

Есть проблемаиз-за службы очистки Windows соответствия сервера, которая удаляет все файлы старше одного часа в папке Output. Внесение изменений в службу также не вариант.

Все файлы в выходной папке автоматически удаляются каждую минуту, поэтому иногда даже пользователи, извлекающие данные в эту папку, не могут получить доступ к извлеченным файлам из-за ограничений по времени и процесса очистки, запускаемого раз в минуту.

Вопрос:Есть ли переключатель, позволяющий 7zip установить время изменения извлеченных файлов на [текущее] текущее время, а не время файлов в архиве?

решение1

Как обходной путьДля решения этой проблемы можно изменить атрибуты даты изменения файлов после их извлечения во временное хранилище, а затем переместить их.

Вы можете извлечь файлы во временную папку с помощью 7za, настроить значения даты изменения извлеченных файлов так, чтобы они соответствовали текущей дате и времени, переместить их в конечное место назначения, а затем очистить временные файлы/папку.

Просто задайте полный путь к расположению архивного файла с помощью $fileзначения переменной. Также задайте полный путь к расположению конечной папки назначения с помощью $destзначения переменной, указывающей на расположение, в котором находится служба, которая каждую минуту удаляет файлы старше определенного возраста.

PowerShell

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

Поддерживающие ресурсы

Связанный контент