Как перезаписать 7zip?

У кого-нибудь была проблема с перезаписью файлов с помощью 7zip. Я использую этот скрипт:

    if ($name.Contains('something'))
 {
 Get-ChildItem \\server\load\$name | 
 % {
 & "C:\test\7z.exe" "x" "-aoa" "-y" $_.fullname "-o\\server\output"
   }
  }
else
{
"$name unknown"
}

Все работает нормально, когда вы удаляете файлы перед запуском скрипта, но он не перезаписывает новые файлы. Я использую для этого -aoa, но, может быть, для этого есть другой переключатель? Когда я пытаюсь извлечь файлы в графическом интерфейсе 7zip и перезаписать его, это тоже нормально, поэтому я думаю, что это не проблема с разрешением.

Спасибо


person WhiteHorse    schedule 23.04.2014    source источник


Ответы (1)


Попробуйте использовать это:

&"C:\test\7z.exe" x -aoa -y "$_.fullname" -o"\\server\output"

По моему опыту, & не очень согласуется с тем, как он обрабатывает аргументы. Однако в целом следует исходить из того, что PowerShell не удаляет кавычки из аргументов при использовании &. Вы должны использовать кавычки только тогда, когда программа, которую вы вызываете, нуждается в них в своих собственных аргументах. В моем сценарии, который архивирует журналы IIS, я использую это:

&"$7Zip" a "$ArchiveFile" "$FullLogPath\$LogFileSpec" -mx=9 -mmt=on

Переменные — это просто пути или имена файлов. Кавычки здесь просто потому, что пути и имена файлов могут содержать пробелы.

Как я обычно понимаю, это Write-Host строка, которую & собирается вызывать, затем копировать и вставлять ее в окно оболочки cmd.exe.

person Bacon Bits    schedule 23.04.2014
comment
Спасибо за ответ. К сожалению, ваше решение дает тот же результат. Может быть, мне нужно распаковать файлы в другое место и принудительно переместить их? - person WhiteHorse; 24.04.2014
comment
Хм. Это может сработать. Единственное, что я могу тогда подумать, это то, что это проблема, потому что удаленные файлы заблокированы или просто проблема с выводом на удаленный путь. Однако, если та же самая строка работает, когда вы вводите ее вручную, это не имеет для меня смысла. - person Bacon Bits; 25.04.2014
comment
Сегодня я смотрел, заблокированы ли файлы с помощью скрипта от этого парня: mspowershell .blogspot.com.es/2008/07/locked-file-detection.html До обновления файлы не были заблокированы. все тот же результат. Я думаю, что что-то не так с 7zip, завтра я попробую другой архиватор. - person WhiteHorse; 28.04.2014
comment
У меня были проблемы с тем, что он неправильно олицетворял пользователя, особенно с включенным UAC. Если вы попытаетесь просмотреть изображение, дважды щелкнув его в архиве с включенным UAC, 7-Zip потеряет связь с файлом. Вы можете попробовать использовать System.IO.Packaging.ZipPackage с Powershell 3.0+, если вам нужны вещи в реальной PowerShell, или в расширениях сообщества на pscx.codeplex.com, который содержит виджет ZIP. - person Bacon Bits; 28.04.2014
comment
Я думаю, мы можем закрыть этот вопрос. Я попробую ваши решения. Также я думаю о переименовании существующих элементов перед распаковкой и после этого удаления переименованных файлов. Это было бы самым простым обходным решением, если бы это сработало :) Спасибо за вашу помощь. - person WhiteHorse; 29.04.2014
comment
Просто для порядка, здесь, в апреле 2020 года, это все еще проблема при запуске 7-Zip из PowerShell. Он просто не будет перезаписывать файлы без предварительного их удаления. Я не знаю, почему, и этот вопрос не решил этого. - person ggariepy; 15.04.2020