Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
Nik782
0 / 0 / 0
Регистрация: 29.08.2015
Сообщений: 20
1

Разархивация и архивация файлов, осуществляемые с определёнными параметрами

29.08.2015, 02:52. Просмотров 4508. Ответов 44
Метки нет (Все метки)

Помогите пожалуйста с созданием двух BAT-файлов. По форуму искал. К сожалению ничего подходящего не нашел.

Есть дерево папок с файлами. Файлов несколько десятков тысяч.
В основном архивы zip, но встречаются и незаархивированные с разными расширениями. Очень редко архивы rar.
В каждом архиве только один файл.
Имена папок русские с пробелами. Имена файлов в основном также русские с пробелами. Часто достаточно длинные (как названия папок, так и файлов)

1. Нужен бат-файл, который разархивирует все файлы, начиная с указанной директории, с сохранением структуры поддиректорий, с удалением архивов, пропуская неархивированные.

2. Второй бат-файл, который заархивирует файлы с указанными расширениями в архивы zip (один архив = один файл) с удалением оригинальных файлов, конечно с сохранением всей структуры дерева папок.

Бат файлы желательно должны быть перемещаемыми.
Т.е. копируются рядом с нужным каталогом набирается что то типа

rununzip.bat "Основы китайского языка. Задоенко"
Все архивы (zip, rar) в папке и подпапках /"Основы китайского языка. Задоенко" будут разархивированы в те же подпапки, а сами архивы удалены.

runzip.bat "Основы китайского языка. Задоенко"
Файлы с указанными внутри батника расширениями (например txt и bmp) в папке и подпапках /"Основы китайского языка. Задоенко" будут заархивированы с максимальным сжатием в архивы zip с теми же именами, а оригиналы удалены.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2015, 02:52
Ответы с готовыми решениями:

Создание bat файла с определёнными параметрами
Помогите создать батник. Помогите пожалуйста Указания к работе: во всех...

Написать батник, который будет запускать Avast с определёнными параметрами и ключами
Добрый день! Идея состоит в том, чтобы написать батник, который будет заходить...

Очистка рабочего стола от всех файлов, кроме файлов с определёнными расширениями
Добрый день. Помогите написать скрипт для очистки определенных папок (Рабочий...

Копирование файлов с определёнными условиями
Здравствуйте! Подскажите пожалуйста как выполнить это в командной строке:...

Подсчёт и удаление файлов с определёнными расширениями
Здрасте) Помоги пожалуйста с заданием. Вообще с батниками как то не...

44
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
29.08.2015, 21:00 2
Nik782, Полностью мне это не по силам, но направить могу. Например разархивировать все из "papka" (любой архив, причем именно архив, остальное будет не тронуто), с учетом подкаталогов рядом с этой папкой в папки с именем архивов, но удаление архивов, если поставить сюда, будет удалять и не архивы соответственно, Вы говорили что и такие есть, поэтому удаление надо допиливать, наверное через find, поиск архива, как-то так типо.
Windows Batch file
1
2
3
4
5
6
@echo on
for /r "%Userprofile%\Desktop\papka" %%i in ("*") do (
 for %%j in ("%%~i") do (
  "%Programfiles%\7-Zip\7z.exe" x -t* "%%~j" -o"%%~nj"
))
pause
.

Добавлено через 6 минут
Или в строке 2
Windows Batch file
1
for /r "%Userprofile%\Desktop\papka" %%i in ("*.7z, *.zip, *.rar, *.?") do (
- указывать тогда все виды архивов, которые у Вас есть в папке, тогда уже можно добавить
Windows Batch file
1
del "%%i"
.

Добавлено через 10 минут
Еще забыл сказать, пробелы здесь не влияют на ход события, а батник обязательно сохранить в кодировке OEM-866.

Добавлено через 16 минут
Нет, так
Windows Batch file
1
for /r "%Userprofile%\Desktop\papka" %%i in ("*.7z, *.zip, *.rar, *.?") do (
- не работает

Добавлено через 1 час 40 минут
Nik782, Вот так можно распаковать, архивы, если еще есть какие-то добавить в строке "for %%a in (zip, rar, 7z) do (..."
Windows Batch file
1
2
3
4
5
6
7
@echo on
for %%a in (zip, rar, 7z) do (
 for /f "delims=" %%b In ('dir /b /s /a-d "%Userprofile%\Desktop\444\*.%%a" 2^>nul') do (
  "%Programfiles%\7-Zip\7z.exe" x -t* "%%~b" -o"%Userprofile%\Desktop\%%~nb" -y
  del "%%~b"
))
pause
Добавлено через 2 минуты
Даже лишнее немного, так правильно
Windows Batch file
1
2
3
4
5
6
7
@echo on
for %%a in (zip, rar, 7z) do (
 for /f "delims=" %%b In ('dir /b /s /a-d "%Userprofile%\Desktop\papka\*.%%a" 2^>nul') do (
  "%Programfiles%\7-Zip\7z.exe" x -t* "%%~b" -o"%%~nb" -y
  del "%%~b"
))
pause
.

Добавлено через 18 минут
А, запаковать, можно так:
Windows Batch file
1
2
3
4
5
6
7
@echo on
for %%a in (txt, bat, bmp) do (
 for /f "delims=" %%b In ('dir /b /s /a-d "%Userprofile%\Desktop\papka\*.%%a" 2^>nul') do (
  "%Programfiles%\7-Zip\7z.exe" a "%Userprofile%\Desktop\%%~nb.zip" "%%~b"
  del "%%~b"
))
pause
.

Добавлено через 8 минут
А, забыл сжатие, в конце 4-й строки добавьте "x=9", без кавычек.
1
Nik782
0 / 0 / 0
Регистрация: 29.08.2015
Сообщений: 20
30.08.2015, 23:25  [ТС] 3
Цитата Сообщение от alpap Посмотреть сообщение
Вот так можно распаковать,
Этот вариант удалил все архивы (неархивы не тронул)
Цитата Сообщение от alpap Посмотреть сообщение
Даже лишнее немного, так правильно
И этот вариант сделал то же самое (((
Цитата Сообщение от alpap Посмотреть сообщение
А, запаковать, можно так:
Этот вариант удалил файлы с указанными расширениями.

Думаю, проблема в том, что не находит пути. Пишет "Системе не удается найти путь".

Вот выложил небольшой образец структуры (24Мб)
[ссылка удалена]
скриншот


Добавлено через 40 минут
Забыл еще сказать (((
Здорово было бы, если бы архив создавался так:

картинка.bmp http://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow картинка.bmp.zip
текстовый файл.txt http://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow текстовый файл.txt.zip

Чтобы без разархивирования был виден тип файла в архиве.

Добавлено через 20 минут
а также чтобы исключить конфликт между файлами с одинаковыми именами, но разными расширениями

абракадабра.bmp http://www.cyberforum.ru/cgi-bin/latex.cgi?\Rightarrow абракадабра.bmp.zip
абракадабра.fb2 http://www.cyberforum.ru/cgi-bin/latex.cgi?\Rightarrow абракадабра.fb2.zip
0
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
30.08.2015, 23:38 4
Цитата Сообщение от Nik782 Посмотреть сообщение
Этот вариант удалил все архивы (неархивы не тронул)
-
Цитата Сообщение от Nik782 Посмотреть сообщение
с удалением архивов, пропуская неархивированные.
, это как тогда понимать?
Цитата Сообщение от Nik782 Посмотреть сообщение
Этот вариант удалил файлы с указанными расширениями.
-
Цитата Сообщение от Nik782 Посмотреть сообщение
с удалением оригинальных файлов
и это?
Цитата Сообщение от Nik782 Посмотреть сообщение
Думаю, проблема в том, что не находит пути. Пишет "Системе не удается найти путь".
- а какой путь Вы ставите, если мой "%Userprofile%\Desktop\papka", то он приведен для примера или Вам насыпать еды в миску, а потом еще пожевать.

Добавлено через 3 минуты
Цитата Сообщение от Nik782 Посмотреть сообщение
Чтобы без разархивирования был виден тип файла в архиве.
- исправьте в
Цитата Сообщение от alpap Посмотреть сообщение
%%~nb.zip
на %%~nxb.zip.
1
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
30.08.2015, 23:40 5
Nik782, первое задание не понял, по второму так
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
Setlocal EnableDelayedExpansion
 
set "in=c:\1\2\Папка для тестов неархивы"
set "out=c:\1\2\backup"
set "file=%~1"
 
if not exist "%out%" md "%out%"
 
if defined file (
for /f "delims=" %%a in ('dir /b /s /a-d "%in%\%file%.*"') do (
"%ProgramFiles%\7-Zip\7z.exe" a "%%~fna.7z" "%%a"
del /q "%%a"
 ))
 
if not defined file (echo Папка для сжатия не указана)
pause
exit /b
пример вызова сжатия
1.cmd "Убийства по алфавиту"
1
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
30.08.2015, 23:52 6
И еще, установлена ли программа 7zip, раз, если у Вас ОС 7 х64, замените указанный путь "%Programfiles%\7-Zip\7z.exe" на полный Ваш путь к файлу 7z.exe, который в папке 7zip, не помню как в х64, что-то примерно
Windows Batch file
1
C:\Program Filesx64\7-Zip\7z.exe
, посмотрите точно как у Вас и поменяйте в обоих батниках.

Добавлено через 6 минут
И обязательно в кавычках и обязательно батники в кодировке 866.
1
Nik782
0 / 0 / 0
Регистрация: 29.08.2015
Сообщений: 20
31.08.2015, 01:25  [ТС] 7
Цитата Сообщение от alpap Посмотреть сообщение
, это как тогда понимать?
Последние три кода в сообщении. (Почему то не работают спойлеры)
Цитата Сообщение от alpap Посмотреть сообщение
Nik782, Вот так можно распаковать, архивы, если еще есть какие-то добавить в строке "for %%a in (zip, rar, 7z) do (..."
Windows Batch file
1
2
3
4
5
6
7
@echo on
for %%a in (zip, rar, 7z) do (
 for /f "delims=" %%b In ('dir /b /s /a-d "%Userprofile%\Desktop\444\*.%%a" 2^>nul') do (
 "%Programfiles%\7-Zip\7z.exe" x -t* "%%~b" -o"%Userprofile%\Desktop\%%~nb" -y
 del "%%~b"
))
pause
Даже лишнее немного, так правильно
Код Windows Batch file
Windows Batch file
1
2
3
4
5
6
7
@echo on
for %%a in (zip, rar, 7z) do (
 for /f "delims=" %%b In ('dir /b /s /a-d "%Userprofile%\Desktop\papka\*.%%a" 2^>nul') do (
 "%Programfiles%\7-Zip\7z.exe" x -t* "%%~b" -o"%%~nb" -y
 del "%%~b"
))
pause
А, запаковать, можно так:
Windows Batch file
1
2
3
4
5
6
7
@echo on
for %%a in (txt, bat, bmp) do (
 for /f "delims=" %%b In ('dir /b /s /a-d "%Userprofile%\Desktop\papka\*.%%a" 2^>nul') do (
 "%Programfiles%\7-Zip\7z.exe" a "%Userprofile%\Desktop\%%~nb.zip" "%%~b"
 del "%%~b"
))
pause
1 и 2 удалили архивы, но распакованные файлы не появились.
Последний удалил указанные неархивы, но запакованные файлы не появились.
Цитата Сообщение от alpap Посмотреть сообщение
если мой "%Userprofile%\Desktop\papka", то он приведен для примера или Вам насыпать еды в миску, а потом еще пожевать.
Ну я конечно не профи но не настолько . Создал папку "papka" в \Desktop ...
Цитата Сообщение от alpap Посмотреть сообщение
если у Вас ОС 7 х64
да Win7-64, полный путь
Windows Batch file
1
c:\Program Files\7-Zip\7z.exe
Отчитываюсь
Путь к 7z.exe поменял. Кое что начало получаться.
Windows Batch file
1
2
3
4
5
6
7
@echo on
for %%a in (zip, rar, 7z) do (
 for /f "delims=" %%b In ('dir /b /s /a-d "%Userprofile%\Desktop\papka\*.%%a" 2^>nul') do (
  "%Programfiles%\7-Zip\7z.exe" x -t* "%%~b" -o"%%~nb" -y
  del "%%~b"
))
pause
Распаковывает архивы. Удаляет оригиналы. Но для каждого создает собственную папку под тем же названием, что и файл и складывает их подряд без сохранения структуры каталогов рядом с бат-файлом, независимо от того, где он находится.
И с одним файлом получилась ерунда какая то. Название файла (как и название архива оканчивалось на ... (троеточие). Теперь я не могу удалить созданную папку. И вообще она (папка) ведет себя очень странно.
Туда записываются файлы, считываются, открываются, удаляются. При этом рядом создается пустая папка с тем же названием, но без троеточия. Которая прекрасно удаляется. Появляется она лишь при записи файлов в папку с троеточием. При удалении или чтении файлов из папки с троеточием, пустая папка не появляется... Странно...
Windows Batch file
1
2
3
4
5
6
7
@echo on
for %%a in (txt, bat, bmp) do (
 for /f "delims=" %%b In ('dir /b /s /a-d "%Userprofile%\Desktop\papka\*.%%a" 2^>nul') do (
  "%Programfiles%\7-Zip\7z.exe" a "%Userprofile%\Desktop\%%~nb.zip" "%%~b"
  del "%%~b"
))
pause
Этот создает архивы рядом с папкой papka. Без сохранения структуры и создания папок. Просто складывает рядом. Оригиналы также удаляются.
Цитата Сообщение от sov44 Посмотреть сообщение
Nik782, первое задание не понял, по второму так
Это моя ошибка. Перечитал первое сообщение и понял, что не указал что все действия нужно производить в тех же самых папках.

По коду.
Работает только по одному файлу с батником рядом. И только если в пути отсутствуют русские буквы и пробелы. Или я не понял как им пользоваться ((( Дополнительно создается пустая папка backup.
0
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
31.08.2015, 01:49 8
Цитата Сообщение от Nik782 Посмотреть сообщение
и складывает их подряд без сохранения структуры каталогов рядом с бат-файлом, независимо от того, где он находится.
- приведите здесь пример, как-бы это должно выглядеть. Есть папка0, в ней папка1 в ней архив zip, еще в папке0 - папка2 в ней архив rar, также без папки лежит архив 7z и еще разные файлы в папке0 - так я понял. Произвел разархивирование мимо папки0 (могу и в нее), но о какой структуре идет речь, как это должно бы быть на выходе, видимо фантазия у меня нетовось.
0
Nik782
0 / 0 / 0
Регистрация: 29.08.2015
Сообщений: 20
31.08.2015, 01:50  [ТС] 9
Т.е. есть структура. Допустим 8 (или больше) уровней вложений папками.
Код
с:\Big\Папка 2 уровня\Папка 3 уровня\Папка 4 уровня\Папка 5 уровня\Папка 6 уровня\Папка 7 уровня\Папка 8 уровня\Папка 9 уровня\
На каждом уровне могут быть как папки следующего уровня, так и файлы. В основном текстовые разных форматов, но встречаются картинки и другие форматы.
Большинство файлов сейчас запакованы в архивы zip или rar (один архив = один файл). Названия папок и файлов в основном длинные и на русском языке.

Нужно два командника, которые будут копироваться рядом с объектом, например на 5 уровень.
Запуск по типу:
Код
out.bat "Папка 5 уровня"
Действия по первой задаче.
1. сканирование всех папок и файлов в "Папка 5 уровня"
2. При встрече архива zip, rar, 7z
а) распаковать в том же самом месте
б) удалить архивный файл.
3. Продолжить сканирование.

Действия по второй задаче.
Код
in.bat "Папка 5 уровня"
1. сканирование всех папок и файлов в "Папка 5 уровня"
2. При встрече указанных внутри батника типов файлов
а) архивировать их в том же самом месте по принципу "имя файла.расширение.zip"
б) удалить оригинальный файл
3. Продолжить сканирование.

Очень важно именно задавать объект (папку сканирования) именно из командной строки, после файла, т.к. каждый раз править бат-файл это очень долго.

Благодарю за помощь!
0
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
31.08.2015, 03:46 10
Nik782, Тогда вот так распаковать:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
echo Введите имя папки
set /p a=
cd /d "%Userprofile%\Desktop\papka" 
for /f %%i in ('dir /ad /b /s') do (
 if "%a%"=="%%~ni" set "nrp=%%~i"
)
for %%a in (zip, rar, 7z) do (
 for /f "delims=" %%b In ('dir /b /s /a-d "%nrp%\..\*.%%a" 2^>nul') do (
  "%Programfiles%\7-Zip\7z.exe" x -t* "%%~b" -o"%nrp%\.." -y
 del "%%~b"
))
pause
А так запаковать:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
echo Введите имя папки
set /p a=
cd /d "%Userprofile%\Desktop\papka" 
for /f %%i in ('dir /ad /b /s') do (
 if "%a%"=="%%~ni" set "nrp=%%~i"
)
for %%a in (txt, bat, bmp) do (
 for /f "delims=" %%b In ('dir /b /s /a-d "%nrp%\..\*.%%a" 2^>nul') do (
  "%Programfiles%\7-Zip\7z.exe" a "%nrp%\..\%%~nb.zip" "%%~b"
 del "%%~b"
))
pause
И обязательно сохранить в кодировке 866.

Добавлено через 2 минуты
По пути "%Userprofile%\Desktop\papka" - основная папка, вбить ее путь, а вводить точное имя папки нужного уровня.

Добавлено через 2 минуты
Цитата Сообщение от alpap Посмотреть сообщение
a "%nrp%\..\%%~nb.zip"
- опять пропустил расширение: ...%%~nxb.zip".
1
Nik782
0 / 0 / 0
Регистрация: 29.08.2015
Сообщений: 20
31.08.2015, 04:00  [ТС] 11
Спасибо, но я все равно не понял ((
Давайте по пунктам, не все сразу и на конкретном примере, а то я, извините, туплю немного.
Вот, например, путь до файла. Но там в папке еще есть файлы, zip и не zip.
Код
c:\Users\Ch\Desktop\papka\Папка для тестов архивы\Наука. Образование\Перельман\Живой учебник геометрии - 1930.zip
Куда мне поместить созданный BAT-файл и что набрать после вопроса "введите имя папки" чтобы разархивировалось все, что в папке "Наука. Образование" ?

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
echo Введите имя папки
set /p a=
cd /d "%Userprofile%\Desktop\papka" 
for /f %%i in ('dir /ad /b /s') do (
 if "%a%"=="%%~ni" set "nrp=%%~i"
)
for %%a in (zip, rar, 7z) do (
 for /f "delims=" %%b In ('dir /b /s /a-d "%nrp%\..\*.%%a" 2^>nul') do (
  "c:\Program Files\7-Zip\7z.exe" x -t* "%%~b" -o"%nrp%\.." -y
 del "%%~b"
))
pause
0
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
31.08.2015, 05:28 12
Нашел ошибку у себя, в обоих батниках в 5й строке дописать так:
Windows Batch file
1
for /f "delims=" %%i in ('dir /ad /b /s') do (
- иначе не видит имя папки с пробелом в имени.

Добавлено через 20 минут
Nik782, Бат файл поместить куда угодно, сделать к нему ярлык, а уж его (ярлык) запускать с помощью назначенной комбинации горячих клавиш там где Вы работаете. Запустили ярлык, батник спросит имя папки, нужна "Наука", так и вводите Наука и нажимаете enter, все что в Науке самой и во всех ее папках и т.д. распакуется в папку "Наука". Только не забудьте мое изменение внести и путь до основной папки в 4й строке поменять на свой, он у Вас выше: "c:\Users\Ch\Desktop\papka".

Добавлено через 9 минут
Цитата Сообщение от Nik782 Посмотреть сообщение
Наука. Образование
- а это так папка называется, подумал что две разные, не знаю как возьмет точку, или может придеться в строке 6 добавить x в %%~ni - так: %%~nxi или в 5й строке в "delims=." точку добавить, с точкой не пробовал, а много еще нестандартных имен папок есть?

Добавлено через 6 минут
Да, строку
Цитата Сообщение от Nik782 Посмотреть сообщение
if "%a%"=="%%~ni" set "nrp=%%~i"
, заменить на
Windows Batch file
1
if "%a%"=="%%~nxi" set "nrp=%%~i"
, тогда определяются имена и с точкой.

Добавлено через 1 минуту
Вот так и вводите Наука. Образование когда батник запросит имя папки.
1
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
31.08.2015, 08:31 13
Цитата Сообщение от Nik782 Посмотреть сообщение
Дополнительно создается пустая папка backup.
сорри, остаток от прошлого кода.

Попробуйте универсальный код: батник запускается с аргументом, если это архив 7z, он распаковывается, если это файл, то упаковывается в 7z.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@echo off
Setlocal EnableDelayedExpansion
 
set "in=c:\1\книги"
set "file=%~1"
 
 
if defined file (
for /f "delims=" %%a in ('dir /b /s /a-d "%in%\%file%.*"') do (
if exist "%%a" (
    if /i not "%%~xa"==".7z" (
        "%ProgramFiles%\7-Zip\7z.exe" a "%%~pdna.7z" "%%a"
        del /q "%%a"
        ) else (
        "%ProgramFiles%\7-Zip\7z.exe" e "%%a" -o"%%~pda"
        del /q "%%a"
            )
        ) else (
        echo Файл для обработки не найден
        )
    )   
)
if not defined file (echo Укажите Файл для обработки)
pause
exit /b
2
Nik782
0 / 0 / 0
Регистрация: 29.08.2015
Сообщений: 20
31.08.2015, 10:00  [ТС] 14
Цитата Сообщение от alpap Посмотреть сообщение
а много еще нестандартных имен папок есть?
Нет, вводить имя папки вручную не подходит.
Например папка "Радиокот _ Зарядное устройство для Ni-Cd и Ni-MH аккумуляторов. Очень простое."
Или тоже папка "Практические советы по ремонту бытовой радиоэлектронной аппаратуры"
Или вот "Miller, Rand & Miller, Robyn & Wingrove, David"
Но в основном пути примерно такие
"g:\БИБЛИОТЕКА\Книги FB2-ZIP\Отечественная фантастика, фэнтэзи, мистика\!_Малоизвестные советские авторы\Абашели Александр\Абашели - Женщина в зеркале.zip"
Как говорится "Рука бойца колоть устала"(с)
Мой рабочий стол - это всегда ТоталКоммандер. Там есть комбинация Ctrl-Enter, возвращает имя под курсором в коммандную строку.
Цитата Сообщение от alpap Посмотреть сообщение
и путь до основной папки в 4й строке поменять на свой
Это тоже не совсем удобно. А если папки на разных дисках? Так тоже бывает.

Можно научить батник распознавать уровень вложений где он сам находится?
Отсюда и начинать распаковывать (или запаковывать).
А имя папки в которой работать указывать аргументом в коммандной строке.
Допустим так
Код
out.bat "Практические советы по ремонту бытовой радиоэлектронной аппаратуры"
И неважно на каком диске и в какой поддиректории находится эта папка. Если командник рядом, он её найдёт.

Цитата Сообщение от sov44 Посмотреть сообщение
если это архив 7z, он распаковывается, если это файл, то упаковывается в 7z
Не понял. Т.е. батник конвертит только один файл? Или пробегает по всей папке и нераспакованное запаковывает, а запакованное распаковывает?
0
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
31.08.2015, 10:05 15
Цитата Сообщение от Nik782 Посмотреть сообщение
Т.е. батник конвертит только один файл?
Да, по одному файлу. Я так понял ТЗ
Цитата Сообщение от Nik782 Посмотреть сообщение
rununzip.bat "Основы китайского языка. Задоенко"
Или вам нужно указать только папку, а распаковать\запаковать все файлы в ней? Так и это не проблема.
0
Nik782
0 / 0 / 0
Регистрация: 29.08.2015
Сообщений: 20
31.08.2015, 10:24  [ТС] 16
Цитата Сообщение от sov44 Посмотреть сообщение
Или вам нужно указать только папку, а распаковать\запаковать все файлы в ней?
В ней и во всех подпапках, начиная с указанной. Но не все файлы, а согласно условию. Например только zip и rar, но оставить запакованными 7z. (Тут еще нужно анализировать, пока не знаю )
Т.е. если файл запакован, то его распаковать, а архив удалить. Распакованный файл останется на месте архива.
Это первый батник, условно назовем распаковщик )) out.bat

Второй батник "запаковщик" (in.bat) должен запаковать все файлы с заданными расширениями в указанной папке и в подпапках. Каждый файл в отдельный архив с именем "имя файла оригинала.расширение.zip". Оригинальный файл удалить.
Расширения для архивации указываются внутри бат-файла. Т.е. задаются раз и навсегда.
А имя папки, как аргумент.

К сожалению не могу сейчас проверить. Чуть позже.
0
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
31.08.2015, 11:26 17
sov44, Попробуйте доработать мои батники, они в точности выполняют условие, только надо действительно чтобы батник начинал "плясать" с выбранной в дереве папке.
0
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
31.08.2015, 11:33 18
Цитата Сообщение от Nik782 Посмотреть сообщение
Но не все файлы, а согласно условию. Например только zip и rar, но оставить запакованными 7z. (Тут еще нужно анализировать, пока не знаю )
Не понимаю этого каприза. Пока пробуйте так
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
Setlocal EnableDelayedExpansion
 
set "in=c:\1\книги"
set "file=%~1"
 
 
for /f "delims=" %%a in ('dir /b /s /ad "%in%\*" ^|find /i "%~1" ') do (
if /i exist "%%a" (
    for /f "delims=" %%b in ('dir /b /a-d "%%a\*" 2^>nul') do (
    if /i not "%%~xb"==".7z" (
        >nul "%ProgramFiles%\7-Zip\7z.exe" a "%%a\%%~nb.7z" "%%a\%%b"
        del /q "%%a\%%b"
        ) else (
        >nul "%ProgramFiles%\7-Zip\7z.exe" e "%%a\%%b" -o"%%a"
        del /q "%%a\%%b"
            )
        )       
    ) else (
    echo Директория не найдена
))
exit /b
1
Nik782
0 / 0 / 0
Регистрация: 29.08.2015
Сообщений: 20
31.08.2015, 12:04  [ТС] 19
Цитата Сообщение от sov44 Посмотреть сообщение
Не понимаю этого каприза.
Да, Вы правы. Скорее всего это при распаковке лишнее. Но если вдруг понадобится (например разный контент в архивах разного типа) то уже есть в батнике, останется только включить )
Хотя разный контент учтется при запаковке добавлением к имени файла-архива расширения файла-оригинала. Этого будет достаточно.
Цитата Сообщение от sov44 Посмотреть сообщение
Пока пробуйте так
Я не понял, Ваш батник работает с папкой c:\1\книги ? Туда все копировать?
Он запаковывает или распаковывает? Если запаковывает, то где задаются расширения, которые нужно запаковать?

Не по теме:

P.S. А в суперидеале бы вообще обойтись без батника в директории, а встроить в контекстное меню, вызываемое кнопкой клавиатуры справа (не знаю как называется). А в суперсуперидеале "горячими клавишами"... Ну это я размечтался, ага?

0
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,544
31.08.2015, 12:12 20
Nik782, Я специально сделал с основной папкой, так быстрее, просто лучше чтобы все было в ней или хоть на одном диске. Скопировали название нужной папки, в том же тотале и ярлыком запустили Bat и вставили всего делов-то. А, если, делать по-другому, то надо выполнять поиск имени скопированной папки еще и по всем дискам да с учетом вложенности - долго же придется ждать, быстрее уже вручную сделаете.

Добавлено через 2 минуты
Цитата Сообщение от Nik782 Посмотреть сообщение
P.S. А в суперидеале бы вообще обойтись без батника в директории, а встроить в контекстное меню, вызываемое кнопкой клавиатуры справа (не знаю как называется). А в суперсуперидеале "горячими клавишами"... Ну это я размечтался, ага?
- а вот кстати не сложно сделать и очень даже реально, сейчас некогда, думаю за ночь сделаю.
0
31.08.2015, 12:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2015, 12:12

Резервное копирование с исключением файлов с определёнными расширениями
Добрый день! Подскажите как реализовать резервное копирование с применением...

Извлечение файлов из архивов (исключая файлы с определёнными расширениями) и их переименование
Добрый день. Нужна помощь в создании батника - задача: В папке D:/back ...

Архивация по 50 файлов
Есть одна папка в которой n картинок. Я вбрасываю в нее и жму name.bat...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru