%2C%20%D1%87%D1%82%D0%BE%D0%B1%D1%8B%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B8%D0%B7%D0%B2%D0%BB%D0%B5%D1%87%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D0%BD%D0%B0%20%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B5%D0%B5%3F.png)
Прямо сейчас мой серверный сервис вызывает 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;
Поддерживающие ресурсы
- Получить-Дата
- Новый-Товар
- Начало процесса
- Массивы
- Получить-ChildItem
- ForEach-Объект
СтандартПсевдонимыдля Foreach-Object:
%
символ ' ', ForEach - Если
- Set-ItemProperty
- Копировать-элемент
- Убрать предмет