Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Распаковка с переименованием. (http://forum.oszone.net/showthread.php?t=294621)

Павел_Будков@vk 28-01-2015 20:39 2462869

Распаковка с переименованием.
 
Здравствуйте.
Помогите решить такую задачку -
Имеется много 7z архивов в них по несколько файлов с одинаковым расширением .smg
Нужно распаковать или переименовать в самих архивах все файлы по типу имя_папки.smg или имя_папки_цифровой счетчик.smg

Для zip и rar я просто делал for %%i in (*.zip) do "%ProgramFiles%\WinRar\winrar.exe" rn "%%i" "*.smg" "%%~ni.smg"
но с 7z это не прокатывает.

И еще может подскажите, как упаковать содержимое папок, именно их содержимого, а не чтобы в архиве была папка с содержимым, т.е. каждая папка это отдельный архив с именем этой папки и ее содержимым.
Спасибо.

iccup.platoon@vk 28-01-2015 23:11 2462928

1) Все архивы находятся в одной папке?
2) Я выбрал вариант "распаковать". Куда их распаковать? Что я должен сделать с файлами после распаковки?
=-=-=-=-=-=-=-=-=-=-=-=-=
VМожет, так?
Код:

@echo off
SetLocal enabledelayedexpansion
set ProgaZip="ПОЛНЫЙ_ПУТЬ_К_ФАЙЛУ_7z.exe"
:: директория для упаковки
set dr="ПУТЬ_К_ПАПКЕ_В_КОТОРОЙ_ВСЁ_БУДЕТ_УПАКОВАНО"
:: имя полученного архива
set arh=ЗАМЕНИТЬ_НА_СВОЕ_ИМЯ.7z
:: сжатие максимальное в LZMA2
"%ProgaZip%" a "%arh%" "%dr%" -m0=LZMA2 -mx=9 -mmt=2


Павел_Будков@vk 29-01-2015 01:00 2462946

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

iccup.platoon@vk 29-01-2015 22:01 2463456

Тогда так.
Код:

@echo off
setlocal enabledelayedexpansion
set path="ПУТЬ К ПАПКЕ С АРХИВАМИ_СО_СЛЕШЕМ \"
 
for %%a in (%path%*.7z) do (
start "" /wait "ПУТЬ_К_7z.exe" x "%%a" -o"%path%"
)
endlocal
exit /b

Писал по памяти, не обессудьте, но сработать должно.

gora 30-01-2015 21:27 2464051

Цитата:

Цитата Павел_Будков@vk
Имеется много 7z архивов в них по несколько файлов с одинаковым расширением .smg
Нужно ... переименовать в самих архивах все файлы по типу ... имя_папки_цифровой счетчик.smg »

Код:

@Echo Off
SetLocal enabledelayedexpansion
Set folder=e:\Temp 1\22
Set ext=smg

For /F "tokens=* delims=" %%i In ('dir /S /A:-D /B "%folder%\*.7z" 2^>Nul') Do (
        Set cnt=0
        For /F "tokens=*" %%a In ('7z l -ba "%%i"') Do (
                Set /a cnt += 1
                Set ta=%%a
                If /I "!ta:~-3!"=="%ext%" 7z rn "%%i" "!ta:~53!" "%%~ni!cnt!.%ext%"
        )
)


Павел_Будков@vk 02-02-2015 00:30 2464954

Спасибо, большое за помощь.

Павел_Будков@vk 02-02-2015 08:07 2465002

Если можно подскажите, как подправить этот код

Код:

@Echo Off
SetLocal enabledelayedexpansion
Set folder=e:\Temp 1\22
Set ext=smg

For /F "tokens=* delims=" %%i In ('dir /S /A:-D /B "%folder%\*.7z" 2^>Nul') Do (
        Set cnt=0
        For /F "tokens=*" %%a In ('7z l -ba "%%i"') Do (
                Set /a cnt += 1
                Set ta=%%a
                If /I "!ta:~-3!"=="%ext%" 7z rn "%%i" "!ta:~53!" "%%~ni!cnt!.%ext%"
        )
)

чтобы он не пропускал названия содержащие восклицательные знаки, в архивах довольно много вот такого рода имен техт!.smg , и все файлы с восклицательным знаком не меняют имена, просто игнорируются. Как быть?

Спасибо.

Georgio 02-02-2015 14:12 2465184

Цитата:

Цитата Павел_Будков@vk
Как быть? »



Вам нужно убрать включение отложенного расширения переменных ("setlocal enabledelayedexpansion") в начале кода, а затем попробовать варианты:

1) запускать команду в новом процессе с включённым отложенным расширением:
Код:

                cmd /v:on /c "If /I "!ta:~-3!"=="%ext%" 7z rn "%%i" "!ta:~53!" "%%~ni!cnt!.%ext%""
;

2) использовать в команде модификатор "~x" и двойное расширение переменных:
Код:

                If /I "%%~xa"==".%ext%" call 7z rn "%%i" "%%ta:~53%%" "%%~ni%%cnt%%.%ext%"
;

3) можно вынести данную команду в отдельную процедуру.


Работоспособность вариантов не проверял, так как на данный момент у меня архиватор "7-Zip" не установлен.


Примечание: модификатор "~x" отделяет от значения переменной цикла или параметра последнюю точку и все символы, идущие за ней, даже если они не имеют никакого отношения к реальноиу файлу. Например, результатом выполнения в командной строке команды
Код:

for /f %i in ("*|<.>?|") do @echo %~xi
будет
Код:

.>?|
(этими символами не могут быть только оба слеша и двойные кавычки).

Павел_Будков@vk 02-02-2015 14:36 2465205

Спасибо за помощь, очень выручили!
Теперь все работает, как надо!


Время: 21:13.

Время: 21:13.
© OSzone.net 2001-