Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Архивация содержимого папки по размеру

Ответить
Настройки темы
CMD/BAT - Архивация содержимого папки по размеру

Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Доброго времени суток!
Подскажите пожалуйста как при помощи CMD/BAT реализовать следующее:
В папке (input) лежат папки и файлы (все время разные по названию и немного отличаются по размеру 5-10КБ), например:
images\
files\
rss1.xml
robots.txt
sitemap.xml
sitemap58.php
sitemap57.php
sitemap56.php
sitemap55.php
...
art-218011.php

Требуется создать архивы по 7,5МБ+-1МБ.
Имя архива по названию родительской папки плюс порядковый номер, в итоге должно получиться примерно так:
input1.zip (содержит:
images\
files\
rss1.xml
robots.txt)

input2.zip (содержит:
sitemap.xml
sitemap58.php
sitemap57.php)

input3.zip (содержит:
sitemap56.php
sitemap55.php)

и т.д.

Если реализация по размеру архива 7,5МБ сложна в реализации - вполне подойдет:
берем из папки первые (100-200) файлов - пакуем их в input1.zip, следующие (100-200) в input2.zip и так пока не кончатся папки и файлы в папке input.

Заранее благодарен!

Отправлено: 15:13, 10-11-2015

 

Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата megaloman:
Или Вы хотите, чтобы путь терялся и распаковывалась только самая нижняя из указанных папок Data\ ? »
да именно так

Отправлено: 12:19, 23-11-2015 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Вот так?
Код: Выделить весь код
@Echo Off
CLS

Set "P0=%~dp0"

Set /A SMax=7500
Set /A SAve=10
Set /A Perc=80

Set /A NIn=%SMax%*100/%SAve%/%Perc%
echo %NIn%
rem Set /A NIn=111

Set "DirIn=E:\Games\Сокровища Монтесумы\Data"
Set "DirArc=E:\Delete"

Set ARC="C:\Program Files\WinRAR\Rar.exe" a -r

FOR /F "usebackq tokens=2,3,* delims=\" %%i IN ('%DirIn%') DO (
	Set "NArc=%Date:~6,4%%Date:~3,2%%Date:~0,2%-%%i"
	Set "NDir=%%i"
rem	Set "PDir=%%j\%%k"
	Set "PTmp=%Tmp%\%%i"
)

SetLocal EnableExtensions EnableDelayedExpansion

Call :OutTmp "%DirIn%"

xcopy "%DirIn%\*.*" "%OTmp%\" /t /e /y  >nul
cd /d "%OTmp%"
cd ..

Set "PDir=%DTmp%"

Set /A N=1
Set /A M=0
FOR /F "usebackq delims=" %%i IN (`dir "%DirIn%\" /b /A:-D /s 2^>nul`) DO (
	Call :OutTmp "%%i"
	Copy "%%i" "!OTmp!" >nul
	Set /A M=!M!+1
	If !M! GEQ %NIn% (
		Call :OutTmp "%DirIn%"
		echo !M! "%DirArc%\%NArc%!N!.rar" "%PDir%\"
		%ARC% "%DirArc%\%NArc%!N!.rar" "%PDir%\*.*" >nul
		rd "%OTmp%" /s /q
		xcopy "%DirIn%\*.*" "%OTmp%\" /t /e /y >nul
		Set /A N=!N!+1
		Set /A M=0
	)  
)

If NOT !M!==0 (
	echo !M! "%DirArc%\%NArc%!N!.rar" "%PDir%\"
	%ARC% "%DirArc%\%NArc%!N!.rar" "%PDir%\*.*" >nul
)

cd /d "%P0%"
rd "%Tmp%\%NDir%" /s /q

GoTo :Eof

:OutTmp
Set "DTmp=%~nx1"
Set "OTmp=%Tmp%%~pnx1"
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:43, 23-11-2015 | #12


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата megaloman:
Вот так? »

еще ниже = только корень

Отправлено: 10:27, 25-11-2015 | #13


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Ом мани падме хум :-)
Код: Выделить весь код
@Echo Off
CLS

Set "P0=%~dp0"

Set /A SMax=7500
Set /A SAve=10
Set /A Perc=80

Set /A NIn=%SMax%*100/%SAve%/%Perc%
echo %NIn%
rem Set /A NIn=111

Set "DirIn=E:\Games\Сокровища Монтесумы\Data"
Set "DirArc=E:\Delete"

Set ARC="C:\Program Files\WinRAR\Rar.exe" a -r

FOR /F "usebackq tokens=2,3,* delims=\" %%i IN ('%DirIn%') DO (
	Set "NArc=%Date:~6,4%%Date:~3,2%%Date:~0,2%-%%i"
	Set "NDir=%%i"
	Set "PTmp=%Tmp%\%%i"
)

SetLocal EnableExtensions EnableDelayedExpansion

Call :OutTmp "%DirIn%"

xcopy "%DirIn%\*.*" "%OTmp%\" /t /e /y  >nul
cd /d "%OTmp%"

Set "PDir=%DTmp%"

Set /A N=1
Set /A M=0
FOR /F "usebackq delims=" %%i IN (`dir "%DirIn%\" /b /A:-D /s 2^>nul`) DO (
	Call :OutTmp "%%i"
	Copy "%%i" "!OTmp!" >nul
	Set /A M=!M!+1
	If !M! GEQ %NIn% (
		Call :OutTmp "%DirIn%"
		echo !M! "%DirArc%\%NArc%!N!.rar" "%PDir%\"
		%ARC% "%DirArc%\%NArc%!N!.rar" *.* >nul
		rd "%OTmp%" /s /q 2>nul
		xcopy "%DirIn%\*.*" "%OTmp%\" /t /e /y >nul
		Set /A N=!N!+1
		Set /A M=0
	)  
)

If NOT !M!==0 (
	echo !M! "%DirArc%\%NArc%!N!.rar" "%PDir%\"
	%ARC% "%DirArc%\%NArc%!N!.rar" "*.*" >nul
)

cd /d "%P0%"
rd "%Tmp%\%NDir%" /s /q

GoTo :Eof

:OutTmp
Set "DTmp=%~nx1"
Set "OTmp=%Tmp%%~pnx1"
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 14:58, 25-11-2015 | #14



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Архивация содержимого папки по размеру

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Архивация папки в vbs and331 Скриптовые языки администрирования Windows 0 17-08-2013 15:15
Любой язык - Скрипт для распределения файлов по папкам кучками по n-ому размеру DmitryAnatolich Скриптовые языки администрирования Windows 9 06-05-2013 15:20
Доступ - Запрет на печать содержимого папки SanCho Microsoft Windows 7 3 15-05-2012 17:32
[решено] запрет просмотра содержимого папки dimds Microsoft Windows NT/2000/2003 4 25-03-2011 09:43
Ограничить размер содержимого папки clin Microsoft Windows NT/2000/2003 6 12-12-2008 13:55




 
Переход