Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Архивация с помощью cmd с условием (http://forum.oszone.net/showthread.php?t=349827)

Kofeinchik 19-10-2021 14:47 2969247

Архивация с помощью cmd с условием
 
Добрый день!
Прошу помощи сделать батник.
Необходимо архивировать файлы с помощью командной строки, файлы логов с названием типа QWE_123456, WER_123456, ERT_123456, RTY_123456.. номер которых повторяется 5 раз, а буквы разные , необходимо архивировать их так чтобы в каждом архиве было 5 файла с одинаковыми номерами ,но не буквами и при этом надо учесть, что возможна ситуация когда есть часть файлов, например только один номер. В этом случае надо создать архив, а при следующем запуске батника обновить данный архив новыми файлами при их наличии.

megaloman 19-10-2021 16:09 2969255

Цитата:

Цитата Kofeinchik
архивировать их так чтобы в каждом архиве было 5 файла с одинаковыми номерами »

А почему 5, а больше 5 может быть? Что тогда делать?
Цитата:

Цитата Kofeinchik
123456 »

это случаем не дата (в каком формате?). А что с исходными файлами после архивации? Какое, кстати, у нах расширение? Остаются на месте или должны быть или перемещены или удалены?
Откуда берутся номера? Вы их руками собираетесь как-то определять или надо просмотреть всю папку и обработать все возможные найденные номера? Число букв в имени всегда одинаково?

megaloman 19-10-2021 17:52 2969268

Вот вариант (пути пропишИте свои):
В указанной папке 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 , но почему-то через батник архивы не создаются, а если из командной строки то создается пустой безымянный архив , в чем может быть причина?

megaloman 20-10-2021 09:52 2969313

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мя (только щас заметил) , но номер количество цифр одинаковое. Логи пока не могу дать.

megaloman 20-10-2021 10:58 2969319

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.

Время: 23:42.
© OSzone.net 2001-