Имя пользователя:
Пароль:
 

Название темы: Архивирование каталога
Показать сообщение отдельно

Ветеран


Contributor


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

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


Вот оптимизированный вариант ориентированный на планировщик
Код: Выделить весь код
@Echo Off
cls
	Set "Src=Z:\Box_In\Мой контент\Книги"
	Set "Mask=File_2018-10-??_Original."
rem	Set "Mask="

rem	Set "DirKey=/O:-N /A:D"
	Set "DirKey=/O:-N"

	Set "Dst=Z:\Книги.arc"
	Set "Log=%Dst%\%~nx0.log"

	Set Arc="C:\Program Files\WinRar\WinRar.exe" a -r -dh -m3 -s -rr5p -ts+ -y
	Set "Ext=rar"

	Pushd "%Src%" || (Set MSG=Folder not Found "%Src%" &Set /A Err=2 &GoTo :End)
	If Not Exist "%Dst%" Md "%Dst%" || (Set MSG=Folder not Created "%Dst%" &Set /A Err=3 &GoTo :End)

	Set /A Err=1

	If     "%Mask%"=="" For /F "usebackq delims=" %%d IN (`2^>nul Dir "%Src%\%Mask%" /B %DirKey%`) DO (Set /A Err=0 &Call :OutArc "%%d")
	If Not "%Mask%"=="" For /F "usebackq delims=" %%d IN (`2^>nul Dir "%Src%\%Mask%" /B %DirKey%`) DO (Set /A Err=0 &Call :OutArc "%%d" &GoTo :End)

	:End
	Popd

	If "%Err%"=="1" (Set MSG=File or Folder not Found "%Src%\%Mask%" %DirKey%)
	If Not "%Err%"=="0" >>"%Log%" Echo %Date% %Time% %Msg%
pause
Exit /B %Err%

:OutArc
	If Not Exist "%Dst%\%~1.*" (
		>>"%Log%" Echo %Date% %Time% "%Src%\%~1" 
		%Arc% "%Dst%\%~1.%Ext%" "%~1"
	)
Exit /B
1. Pause можно/нужно закомментировать или убить
2. Если использовать батник в заданиях планировщика, то, наверное, надо иметь лог-файл. Если не надо, закомментируйте выделенные строки.
3. Для настройки работы команды Dir лучше использовать явным образом ключи. Делаем команду Dir /? и изучаем ключи и присваиваем нужный список переменной DirKey.
В частности, Set "DirKey=/O:-N /A:D" даст алфавитную сортировку в обратном порядке и включит в рассмотрение только папки.
4. Маску оставил как есть. В принципе можно легко ввести специальную переменную. Но не увидел большого смысла.
5. Я использую Winrar.exe, подозреваю, он работает быстрее.
Можно, конечно, использовать rar.exe, например:
Set Arc="C:\Program Files\WinRar\Rar.exe" a -r -dh -m3 -s -rr5p -ts+ -y
и подавить его вывод
%Arc% "%Dst%\%~1.%Ext%" "%~1" >nul
6.
Цитата UserX:
Set "Mask=??10??" »
Я не очень вчитывался в код, но эту маску я не понимаю. Кстати, для читабельности кода используйте тег Code

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


Последний раз редактировалось megaloman, 06-11-2018 в 21:52.


Отправлено: 21:44, 06-11-2018 | #23

Название темы: Архивирование каталога