CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
-
sancher
CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
Всем здравствуйте.
Буду крайне признателен если кто-то сможет помочь.
Есть папка, в которой куча разных подпапок, часть из которых называется
имя_logs.
Задача: нужно зайти скриптом в каждую из этих подпапок имя_logs, в которой
лежат файлы с расширениями log, zip, файлы zip (старые) не трогать, а файлы log
необходимо упаковать в один файл, точнее не в один а в несколько.
Нужно собрать файлы по году (взять год времени создания файла), имя результирующего
архива: год.zip
то есть если есть файлы log, созданные в 2015, 2016 годах, то
все log файлы за 2015 год собрать в один архив 2015.zip, а за
2016 в 2016.zip.
Да, самое главное. Нужно не брать последний лог файл (за текущий день),
а брать начиная со вчерашнего и ранее. И будет здорово, если можно реализовать
дозапись новых файлов в 2017 году.
То есть пакуем все файлы за 2017 год кроме сегодняшнего в файл 2017.zip,
если запустим скрипт на следующий день, то добавляем оставшийся файл log
в архив 2017.zip.
Да, идеально будет, если использовать 7zip.
Надеюсь всё понятно написал.
Буду крайне признателен если кто-то сможет помочь.
Есть папка, в которой куча разных подпапок, часть из которых называется
имя_logs.
Задача: нужно зайти скриптом в каждую из этих подпапок имя_logs, в которой
лежат файлы с расширениями log, zip, файлы zip (старые) не трогать, а файлы log
необходимо упаковать в один файл, точнее не в один а в несколько.
Нужно собрать файлы по году (взять год времени создания файла), имя результирующего
архива: год.zip
то есть если есть файлы log, созданные в 2015, 2016 годах, то
все log файлы за 2015 год собрать в один архив 2015.zip, а за
2016 в 2016.zip.
Да, самое главное. Нужно не брать последний лог файл (за текущий день),
а брать начиная со вчерашнего и ранее. И будет здорово, если можно реализовать
дозапись новых файлов в 2017 году.
То есть пакуем все файлы за 2017 год кроме сегодняшнего в файл 2017.zip,
если запустим скрипт на следующий день, то добавляем оставшийся файл log
в архив 2017.zip.
Да, идеально будет, если использовать 7zip.
Надеюсь всё понятно написал.
-
Iska
Re: CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
Цитата sancher:
Надеюсь всё понятно написал.
Туманно.
Надеюсь всё понятно написал.
CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
Туманно.
-
megaloman
Re: CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
sancher, Экий Вы путаник 
1. Нужно собрать файлы по году (взять год времени создания файла), имя результирующего архива: год.zip. Куда поместить этот архив.
2. Не кажется ли Вам, что заархивированные файлы надо удалить?
3. А файлы в архиве хранить с путями?
4. имя результирующего архива: год.zip - а формат архива тоже zip?. Не уверен, но, похоже, 7zip не умеет форматировать в формате Zip.
И вообще, с RARом было бы проще.

1. Нужно собрать файлы по году (взять год времени создания файла), имя результирующего архива: год.zip. Куда поместить этот архив.
2. Не кажется ли Вам, что заархивированные файлы надо удалить?
3. А файлы в архиве хранить с путями?
4. имя результирующего архива: год.zip - а формат архива тоже zip?. Не уверен, но, похоже, 7zip не умеет форматировать в формате Zip.
И вообще, с RARом было бы проще.
-
megaloman
Re: CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
sancher, Экий Вы путаник 
1. Нужно собрать файлы по году (взять год времени создания файла), имя результирующего архива: год.zip. Куда поместить этот архив.
2. Не кажется ли Вам, что заархивированные файлы надо удалить?
3. А файлы в архиве хранить с путями?
4. имя результирующего архива: год.zip - а формат архива тоже zip?. Не уверен, но, похоже, 7zip не умеет форматировать в формате Zip.
И вообще, с RARом было бы проще.

1. Нужно собрать файлы по году (взять год времени создания файла), имя результирующего архива: год.zip. Куда поместить этот архив.
2. Не кажется ли Вам, что заархивированные файлы надо удалить?
3. А файлы в архиве хранить с путями?
4. имя результирующего архива: год.zip - а формат архива тоже zip?. Не уверен, но, похоже, 7zip не умеет форматировать в формате Zip.
И вообще, с RARом было бы проще.
-
sancher
Re: CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
Iska, megaloman, прошу прощения, словесность - не мой конёк )
megaloman, все вопросы по делу, спасибо.
1. Архив оставить в исходной папке имяпапки_log
2. Заархивированные файлы log действительно нужно удалить после успешного сжатия.
3. Нет, файлы нужно хранить без путей. Открыл архив, а внутри просто файлы.
4. Формат архива zip, который можно просмотреть встроенными средствами Windows. Если правильно помню, у 7zip это опция -tzip.
C rar-ом проще, но он денег стоит )
megaloman, все вопросы по делу, спасибо.
1. Архив оставить в исходной папке имяпапки_log
2. Заархивированные файлы log действительно нужно удалить после успешного сжатия.
3. Нет, файлы нужно хранить без путей. Открыл архив, а внутри просто файлы.
4. Формат архива zip, который можно просмотреть встроенными средствами Windows. Если правильно помню, у 7zip это опция -tzip.
C rar-ом проще, но он денег стоит )
-
megaloman
Re: CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
Код:
В формате отображения даты, прописанном в системе, год должен быть в формате ГГГГ и быть последним
Код: Выделить всё
@Echo Off
cls
Set "BoxIn=Z:\Data"
Set "MDir=*_logs"
Set "MFil=*.log"
Set Arc="C:\Program Files\7-Zip\7z.exe" a -tzip -sdel
FOR /F "usebackq delims=" %%d IN (`Dir "%BoxIn%\%MDir%" /S /B /A:D 2^>nul`) DO (
FOR /F "usebackq delims=" %%f IN (`Dir "%%d\%MFil%" /B /A:-D /O-D /T:C 2^>nul`) DO Call :ArcOut "%%d\%%f"
)
pause
GoTo :Eof
:ArcOut
FOR /F "tokens=1 delims= " %%i IN ("%~t1") DO Set TFile=%%i
If "%TFile%"=="%Date%" GoTo :Eof
%Arc% "%~dp1%TFile:~-4%" %1В формате отображения даты, прописанном в системе, год должен быть в формате ГГГГ и быть последним
-
sancher
Re: CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
megaloman, большое спасибо
есть вопрос
Set "BoxIn=Z:\Data" - Z:\Data - это корневая папка, в которой мы работаем?
если так, то почему BoxIn нигде дальше не используется?
я запустил ваш скрипт в таком виде, но он ничего не делает
есть вопрос
Set "BoxIn=Z:\Data" - Z:\Data - это корневая папка, в которой мы работаем?
если так, то почему BoxIn нигде дальше не используется?
я запустил ваш скрипт в таком виде, но он ничего не делает
-
megaloman
Re: CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
sancher, Виноват, был невнимателен. Код исправил в двух местах. Пропишите вместо Z:\Data "папку, в которой куча разных подпапок, часть из которых называется имя_logs".
-
sancher
Re: CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
megaloman, супер!
мегабольшое человеческое спасибо за вашу помощь!
я бы такой скрипт рожал минимум день-два, а может и больше
а может вообще бы не осилил
так что очень сильно выручили
ещё раз благодарю!
мегабольшое человеческое спасибо за вашу помощь!
я бы такой скрипт рожал минимум день-два, а может и больше
а может вообще бы не осилил
так что очень сильно выручили
ещё раз благодарю!
-
sancher
Re: CMD/BAT - [решено] Сделать скрипт с хитрым алгоритмом упаковки файлов
Уважаемый megaloman, помогите, пожалуйста, с другой версией скрипта.
У меня есть папка, в которой большое число других папок, содержащих папки и файлы.
Папки имеют названия на русском и на английском языке.
Задача: нужно скриптом зайти в каждую папку-подпапку (во все папки в дереве) и архиватором 7zip
с уровнем сжатия 1-Скоростной сжать файлы *.log и log*.txt в один архив с именем папки, содержащей эти файлы. После чего исходные файлы удалить.
И было бы здорово иметь 2 версию этого же скрипта: архивировать файлы *.log и log*.txt
в одной папке в отдельные архивы с именем файла, после чего исходные файлы удалить.
У меня есть папка, в которой большое число других папок, содержащих папки и файлы.
Папки имеют названия на русском и на английском языке.
Задача: нужно скриптом зайти в каждую папку-подпапку (во все папки в дереве) и архиватором 7zip
с уровнем сжатия 1-Скоростной сжать файлы *.log и log*.txt в один архив с именем папки, содержащей эти файлы. После чего исходные файлы удалить.
И было бы здорово иметь 2 версию этого же скрипта: архивировать файлы *.log и log*.txt
в одной папке в отдельные архивы с именем файла, после чего исходные файлы удалить.