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

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

Ветеран


Contributor


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

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


UserX,
Цитата UserX:
чтобы при наличии в каталоге Dst архивов (*.rar, *.zip, *.7z и пр.) »
Хаос в данных == непредсказуемому результату.
При анализе наличия архива по маске Файл.* получим соответствие с Файл.jpg.*=Файл.* с ключом /O:-N
Гарантировать, что при ключе /O:N не получится еще какой-нибудь непредсказуемый пропуск, не берусь.
Чтобы результат был предсказуем (работа батника надежнее),то:

Либо считаем, что все архивы имеют расширение %Ext% (в нашем случае Rar), тогда исправление:
Код: Выделить весь код
:OutArc
	If Not Exist "%Dst%\%~1.%Ext%" (
Либо надо перечислить все возможные расширения архивов
Код: Выделить весь код
@Echo Off
cls
	Set "Src=Z:\Box_In"
	Set "Mask=??10??.*"

	Set /A Mode=0		&Rem 1= 1 файл/папка, 0=все файлы/папки по маске

	Set "DirKey=/O:-N"	&Rem /O:-N если выбирается один файл/папка, то выберется самый последний по алфавиту

	Set "Dst=Z:\Книги.arc"
	Set "Log=%Dst%\%~nx0.log"   &Rem Путь к лог-файлу. Можно указать в любом доступном месте с любым именем.

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

	Set "AllExt=rar zip 7z arc"

	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 %Mode%==0 For /F "usebackq delims=" %%d IN (`2^>nul Dir "%Src%\%Mask%" /B %DirKey%`) DO (Set /A Err=0 &Call :OutArc "%%d")
	If %Mode%==1 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
	FOR %%e IN (%AllExt%) DO If Exist "%Dst%\%~1.%%~e" Exit /B 0

	>>"%Log%" Echo %Date% %Time% "%Src%\%~1" 
	%Arc% "%Dst%\%~1.%Ext%" "%~1"
Exit /B 0

И вааще, смесь файлов/папок с одинаковыми именами и разными расширениями может дать неожиданный результат при любых алфавитных сортировках даже при отборе 1 файла с маской с расширением .*
Удалите в Вашем наборе папку 181027 и, в зависимости от ключа сортировки, будете иметь
или 181028.rar или 181030.jpg.rar
Так что при смеси кони/люди (файлы/папки c одинаковыми именами, но разными расширениями) откажитесь от маски с расширением .* и используйте только жестко определённое расширение.

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


Последний раз редактировалось megaloman, 07-11-2018 в 23:19.

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

Отправлено: 22:35, 07-11-2018 | #32

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