Показать полную графическую версию : [решено] Архивация с помощью cmd с условием
Kofeinchik
19-10-2021, 14:47
Добрый день!
Прошу помощи сделать батник.
Необходимо архивировать файлы с помощью командной строки, файлы логов с названием типа QWE_123456, WER_123456, ERT_123456, RTY_123456.. номер которых повторяется 5 раз, а буквы разные , необходимо архивировать их так чтобы в каждом архиве было 5 файла с одинаковыми номерами ,но не буквами и при этом надо учесть, что возможна ситуация когда есть часть файлов, например только один номер. В этом случае надо создать архив, а при следующем запуске батника обновить данный архив новыми файлами при их наличии.
megaloman
19-10-2021, 16:09
архивировать их так чтобы в каждом архиве было 5 файла с одинаковыми номерами » А почему 5, а больше 5 может быть? Что тогда делать? 123456 »это случаем не дата (в каком формате?). А что с исходными файлами после архивации? Какое, кстати, у нах расширение? Остаются на месте или должны быть или перемещены или удалены?
Откуда берутся номера? Вы их руками собираетесь как-то определять или надо просмотреть всю папку и обработать все возможные найденные номера? Число букв в имени всегда одинаково?
megaloman
19-10-2021, 17:52
Вот вариант (пути пропишИте свои):
В указанной папке BoxIn просматриваются файлы вида SSS_NNNNNN.* (S-любой символ, N - цифра)
архивируются в другую папку BoxArc
При наличии файлов в ранее созданном архиве переархивироваться будут только более свежие файлы.
При отсутствии файлов в соответствующем архиве они будут добавлены в архив.
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "BoxArc=Z:\Box_Arc"
Set "ARC=C:\Program Files\WinRAR\WinRAR.exe"
For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\???_??????.*" /B /A:-D ^|FindStr /I /R /C:"^..._[0-9][0-9][0-9][0-9][0-9][0-9]"`) Do (
Set "Name=%%~nf"
Call Set "Name=%%Name:~-6%%"
Call Echo "%%f" %%Name%%
Call "%ARC%" u -ibck -ep "%BoxArc%\%%Name%%" "%BoxIn%\%%f"
)
pause
Exit /B
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "BoxArc=Z:\Box_Arc"
Set "ARC=C:\Program Files\7-Zip.21beta\7z.exe"
For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\???_??????.*" /B /A:-D ^|FindStr /I /R /C:"^..._[0-9][0-9][0-9][0-9][0-9][0-9]"`) Do (
Set "Name=%%~nf"
Call Set "Name=%%Name:~-6%%"
Call Echo "%%f" %%Name%%
>nul Call "%ARC%" u -tzip "%BoxArc%\%%Name%%.zip" "%BoxIn%\%%f"
)
pause
Exit /B
Kofeinchik
20-10-2021, 08:54
А почему 5, а больше 5 может быть? Что тогда делать?
Больше 5 файлов в одном архиве быть не может.
это случаем не дата (в каком формате?). А что с исходными файлами после архивации? Какое, кстати, у нах расширение? Остаются на месте или должны быть или перемещены или удалены?
Откуда берутся номера? Вы их руками собираетесь как-то определять или надо просмотреть всю папку и обработать все возможные найденные номера? Число букв в имени всегда одинаково?
Номер это порядковый , расширение .m, нужно просматривать всю папку и закидывать в архивы, число букв и номеров всегда одинаковое.
Вот вариант (пути пропишИте свои):
В указанной папке BoxIn просматриваются файлы вида SSS_NNNNNN.* (S-любой символ, N - цифра)
архивируются в другую папку BoxArc
При наличии файлов в ранее созданном архиве переархивироваться будут только более свежие файлы.
При отсутствии файлов в соответствующем архиве они будут добавлены в архив.
Спасибо , Использовал код 7-zip , но почему-то через батник архивы не создаются, а если из командной строки то создается пустой безымянный архив , в чем может быть причина?
megaloman
20-10-2021, 09:52
Kofeinchik, переименуйте Ваш батник в .txt файл и приложите к сообщению.
Имхо, Вы где-то напутали в путях. При работе батника должны отображаться имена исходных файлов. Они отображаются? Вообще, что Вы видите при работе батника на консоли?@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "BoxArc=Z:\Box_Arc"
Set "ARC=C:\Program Files\7-Zip.21beta\7z.exe"
>"C:\%~nx0.log" (Dir "%BoxIn%" &Dir "%BoxArc%" &Dir "%ARC%")
For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\???_??????.*" /B /A:-D ^|FindStr /I /X /R /C:"^..._[0-9][0-9][0-9][0-9][0-9][0-9]"`) Do (
Set "Name=%%~nf"
Call Set "Name=%%Name:~-6%%"
Call Echo "%%f" %%Name%%
>nul Call "%ARC%" u -tzip "%BoxArc%\%%Name%%.zip" "%BoxIn%\%%f"
)
pause
Exit /B
Kofeinchik
20-10-2021, 10:25
Имхо, Вы где-то напутали в путях. При работе батника должны отображаться имена исходных файлов. Они отображаются? Вообще, что Вы видите при работе батника на консоли?
Если удалить строчку с FindStr архивация происходит , также может быть проблема в том что в имени файла есть файлы с 3 буквами и 4мя (только щас заметил) , но номер количество цифр одинаковое. Логи пока не могу дать.
megaloman
20-10-2021, 10:58
Kofeinchik, Надо так (после Ваших уточнений): For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\*_??????.*" /B /A:-D ^|FindStr /I /R /C:"^.*_[0-9][0-9][0-9][0-9][0-9][0-9]"`) Do (
Если у файлов гарантированно есть расширение, то лучше так: For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\*_??????.*" /B /A:-D ^|FindStr /I /R /C:"^.*_[0-9][0-9][0-9][0-9][0-9][0-9]\."`) Do (
Kofeinchik
20-10-2021, 12:07
megaloman, Спасибо большое, так заработало.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.