Kofeinchik |
19-10-2021 14:47 2969247 |
Архивация с помощью cmd с условием
Добрый день!
Прошу помощи сделать батник.
Необходимо архивировать файлы с помощью командной строки, файлы логов с названием типа QWE_123456, WER_123456, ERT_123456, RTY_123456.. номер которых повторяется 5 раз, а буквы разные , необходимо архивировать их так чтобы в каждом архиве было 5 файла с одинаковыми номерами ,но не буквами и при этом надо учесть, что возможна ситуация когда есть часть файлов, например только один номер. В этом случае надо создать архив, а при следующем запуске батника обновить данный архив новыми файлами при их наличии.
|
Цитата:
Цитата Kofeinchik
архивировать их так чтобы в каждом архиве было 5 файла с одинаковыми номерами »
|
А почему 5, а больше 5 может быть? Что тогда делать? это случаем не дата (в каком формате?). А что с исходными файлами после архивации? Какое, кстати, у нах расширение? Остаются на месте или должны быть или перемещены или удалены?
Откуда берутся номера? Вы их руками собираетесь как-то определять или надо просмотреть всю папку и обработать все возможные найденные номера? Число букв в имени всегда одинаково?
|
Вот вариант (пути пропишИте свои):
В указанной папке 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
7-Zip
Код:
@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 2969308 |
Цитата:
А почему 5, а больше 5 может быть? Что тогда делать?
|
Больше 5 файлов в одном архиве быть не может.
Цитата:
это случаем не дата (в каком формате?). А что с исходными файлами после архивации? Какое, кстати, у нах расширение? Остаются на месте или должны быть или перемещены или удалены?
Откуда берутся номера? Вы их руками собираетесь как-то определять или надо просмотреть всю папку и обработать все возможные найденные номера? Число букв в имени всегда одинаково?
|
Номер это порядковый , расширение .m, нужно просматривать всю папку и закидывать в архивы, число букв и номеров всегда одинаковое.
Цитата:
Вот вариант (пути пропишИте свои):
В указанной папке BoxIn просматриваются файлы вида SSS_NNNNNN.* (S-любой символ, N - цифра)
архивируются в другую папку BoxArc
При наличии файлов в ранее созданном архиве переархивироваться будут только более свежие файлы.
При отсутствии файлов в соответствующем архиве они будут добавлены в архив.
|
Спасибо , Использовал код 7-zip , но почему-то через батник архивы не создаются, а если из командной строки то создается пустой безымянный архив , в чем может быть причина?
|
Kofeinchik, переименуйте Ваш батник в .txt файл и приложите к сообщению.
Имхо, Вы где-то напутали в путях. При работе батника должны отображаться имена исходных файлов. Они отображаются? Вообще, что Вы видите при работе батника на консоли?
Для отладки вставьте в батник со своими путями строку, которая организует на C: лог-файл. Приложите его к сообщению.
Код:
@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 2969317 |
Цитата:
Имхо, Вы где-то напутали в путях. При работе батника должны отображаться имена исходных файлов. Они отображаются? Вообще, что Вы видите при работе батника на консоли?
|
Если удалить строчку с FindStr архивация происходит , также может быть проблема в том что в имени файла есть файлы с 3 буквами и 4мя (только щас заметил) , но номер количество цифр одинаковое. Логи пока не могу дать.
|
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 2969321 |
megaloman, Спасибо большое, так заработало.
|
Время: 23:42.
© OSzone.net 2001-