Я могу сделать это в настоящее время, но только если я делаю это по одной папке за раз, мне было интересно, есть ли способ сделать все это сразу, я думал о файле .bat.
2 ответа на вопрос
2
LotPings
@Echo off For %%F in (Photos,Videos,Documents) Do ( For /F "delims=" %%Z in ('Dir /B/S/A-D "C:\Archives\%%F\*.zip" 2^>Nul') Do ( 7z x "%%~fZ" -o"%%~dpnZ\" && Rem Del "%%~fZ" ) )
Если вы хотите удалить файл zip после успешного распаковывания, удалите Remперед del.
Вот объяснение каждого раздела, который передается в следующий раздел и, таким образом, выполняется Powershell по порядку:
Get-ChildItem -Filter * .zip -Recurse C: \ Archives : найти все zip-файлы в C: \ Archives
% {$ _. FullName} : для каждого результирующего объекта показывать полный путь и имя
Split-Path : показать только путь (не имя файла) каждого почтового индекса
Get-Unique : удалить дубликаты из этого списка
% : наконец, используйте созданный список, чтобы перейти в каждый найденный каталог; используйте 7z.exe, чтобы распаковать все zip-файлы, найденные в каждом каталоге, с аргументом -o *, чтобы распаковать содержимое каждого zip-файла в каталог с именем этого zip-файла.
Предположения:
C: \ Archives - это каталог, в котором хранятся все ваши zip-файлы.
Ваш 7-Zip установлен в папку по умолчанию
Исследуя этот вопрос, я пришел к выводу, что предпочитаю bash PowerShell :-)
Ну, я считаю 6 команд плюс 7z. И вы не ограничиваетесь данными папками. Названия почтовых индексов A, B, C не нуждаются в цитировании, но вы никогда не узнаете. `gci C: \ Archives \ *. zip -r |% {& '7z.exe' x $ _. FullName -o $ _. Directory + $ _. BaseName}` также подойдет.
LotPings 7 лет назад
0
Только команда 7z изменяет что-либо на диске. Остальные подключены к последней команде 7z. Я отредактировал свой ответ из «одной команды PowerShell» в «PowerShell one-liner», чтобы отразить ваше семантическое наблюдение. В исходном вопросе я ничего не видел об «ограничении указанными папками», кроме C: \ Archives \ верхнего уровня, поэтому я не пытался это сделать. Либо «тонна подпапок» означает «три подпапки», либо я был прав, не ограничиваясь примерами папок.
FosseWay 7 лет назад
0
@FosseWay Я попытался запустить скрипт и продолжаю получать следующую ошибку: Get-ChildItem: Невозможно найти позиционный параметр, который принимает аргумент "%". В строке: 1 символ: 1 + Get-ChildItem -Filter * .zip -Recurse H: \ Literature \ To-Sort% {$ _. Fu ... + ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo: InvalidArgument: (:) [Get-ChildItem], ParameterBindingException + FullyQualifiedErrorId: PositionalParameterNotFound, Microsoft.PowerShell.Commands.GetChildItemCommand
Chris Jackson 7 лет назад
0
Жаль это слышать, @ChrisJackson. Что происходит, когда вы запускаете только `Get-ChildItem -Filter * .zip -Recurse C: \ Archives`?
FosseWay 7 лет назад
0