Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
NeoMatrix
Модератор
Эксперт NIX
4658 / 1187 / 86
Регистрация: 24.05.2011
Сообщений: 10,411
Записей в блоге: 2
1

Скрипт автоархивации каталога

13.12.2017, 14:38. Просмотров 799. Ответов 13
Метки нет (Все метки)

Всем привет!

Мне нужен скрипт, который я думаю воткнуть в планировщик Виндовс, который будет регулярно архивировать прописанные в теле скрипта директории и складывать их в другую, также прописанную в теле скрипта, директорию, Но хотелось бы, чтобы оно писало всего две версии архива: последнюю и предпоследнюю, чтобы не захламляло место на HDD устаревшими архивами.
В смысле: в путях "D:\%Path%\DataBase\DB1", "D:\%Path%\DataBase\DB2", "D:\%Path%\DataBase\DB3" и т.д. лежат текущие базы данных
Я думаю заархивировать "D:\%Path%\DataBase" в файл "H:\Arhives\New\DataBases1.7z" , но при этом, то, что лежит в этом пути переложить в "H:\Arhives\Old\DataBases1.7z" , а "H:\Arhives\Old\DataBases1.7z" - удалить
тем самым, у меня должно иметься в наличии две версии архива - последняя в New и предпоследняя в Old.
Аналогично по этому же алгоритму делать архив и с базами в "E:\%Path%\DataBase\DB1", "E:\%Path%\DataBase\DB2" и т.д. в "H:\Arhives\New\DataBases2.7z" и "H:\Arhives\Old\DataBases2.7z"

Собственно, у меня загвоздка с кодингом - ручками я это делаю, но в скрипт оформить у меня не получается.
До сегодняшнего дня всё это делалось руками китайским HaoZip'ом и в другие пути. Далее думаю всё это автоматизировать с использованием 7Zip (можно и с RAR). Так что, особого значения, на данный момент, который из архиваторов использовать, для меня пока нет.

Сейчас буду разбираться с ключами и опциями этих архиваторов, если у кого-либо есть какие-либо дельные советы - милости прошу.
Если вы напишете готовое решение с этими архиваторами и путями - буду особо благодарен.
За любое содействие - уже спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2017, 14:38
Ответы с готовыми решениями:

Создание каталога, копирование файлов, архивирование содержимого каталога, запись результата работы в файл
Написать командный файл, выполняющий следующие действия: создать каталог с...

Рекурсивный поиск и удаление каталога. Пробелы в имени каталога
Со вторым днем зимы всех. Есть bat: @echo off rem unsvn.bat setlocal rem...

Объединить скрипт удаления переводов строки и скрипт вставки перевода по специальному символу
Здравствуйте, решаю задачу обработки текстового файла, необходимо сперва...

Скрипт, формирующий для вывода определённого сообщения через заданный промежуток времени другой скрипт
Приветствую сообщество CyberForum. Подскажите как реализовать такую задачу....

Обновление ОС из каталога
В общем в сетке есть несколько машинок на разных ос (хр,7,8) и есть общий...

13
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
13.12.2017, 15:01 2
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@echo off
SetLocal EnableExtensions
 
:: каталог с предыдущей версией архива
set NewArcPath=H:\Arhives\New
 
:: каталог с новой версией архива
set OldArcPath=H:\Arhives\Old
 
:: путь к 7zip архиватору
set arc7z=.\tools\7zip\7za.exe
 
if not exist "%NewArcPath%" md "%NewArcPath%"
if not exist "%OldArcPath%" md "%OldArcPath%"
 
:: Список путей для архивации
For %%a in (
"g:\1\DB1"
"g:\1\DB2"
) do (
  echo.
  if exist "%NewArcPath%\%%~nxa.7z" (
    echo Moving %%~nxa.7z to "%OldArcPath%" ...
    move /y "%NewArcPath%\%%~nxa.7z" "%OldArcPath%\" && (echo Success.) || (echo !!! FAILED !!! & pause>NUL)
  )
  echo.
  echo Zipping %%~nxa.7z
  >NUL "%arc7z%" a -mx9 -y -o"%NewArcPath%" "%NewArcPath%\%%~nxa.7z" "%%a" && (echo Success.) || (echo !!! FAILED !!! & pause>NUL)
)
echo.
echo Finished.
pause
0
NeoMatrix
Модератор
Эксперт NIX
4658 / 1187 / 86
Регистрация: 24.05.2011
Сообщений: 10,411
Записей в блоге: 2
13.12.2017, 15:24  [ТС] 3
Спасибо, только покажи, где мне прописать пути к текущим рабочим директориям с базами на D:\ и на E:\ , а то я не совсем понял.
Если я заменю
Windows Batch file
1
2
"g:\1\DB1"
"g:\1\DB2"
на абсолютные пути
Windows Batch file
1
2
"D:\%Path%\DataBase\"
"E:\%Path%\DataBase\"
Оно работать будет?

Вместо %Path% я подставлю реальные пути к каталогам.
В данный момент я не помню реальные пути - они на другой удалённой машине, к которой удалённого доступа у меня нет.
0
YuS_2
Любознательный
855 / 565 / 181
Регистрация: 10.03.2016
Сообщений: 1,292
13.12.2017, 15:28 4
Цитата Сообщение от NeoMatrix Посмотреть сообщение
Оно работать будет?
работать оно будет, но вот системную переменную %path%, лучше в таких действиях не использовать...
1
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
13.12.2017, 15:38 5
Лучший ответ Сообщение было отмечено NeoMatrix как решение

Решение

NeoMatrix, не будет. Сейчас переделаю тебе чуть иначе, чтоб имена архивов можно было указать явно.

Добавлено через 7 минут
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
:: каталог с предыдущей версией архива
set NewArcPath=H:\Arhives\New
 
:: каталог с новой версией архива
set OldArcPath=H:\Arhives\Old
 
:: путь к 7zip архиватору
set arc7z=.\tools\7zip\7za.exe
 
if not exist "%NewArcPath%" md "%NewArcPath%"
if not exist "%OldArcPath%" md "%OldArcPath%"
 
:: Список путей для архивации и соответствующего им имени архива
 
:: Кол-во путей
set PathCnt=2
 
set path[1]=g:\1\DB1
set arc[1]=DataBases1
 
set path[2]=g:\1\DB2
set arc[2]=DataBases2
 
For /L %%C in (1,1,%PathCnt%) do (
  echo.
  if exist "%NewArcPath%\!arc[%%C]!.7z" (
    echo Moving !arc[%%C]!.7z to "%OldArcPath%" ...
    move /y "%NewArcPath%\!arc[%%C]!.7z" "%OldArcPath%\" && (echo Success.) || (echo !!! FAILED !!! & pause>NUL)
  )
  echo.
  echo Zipping !arc[%%C]!.7z
  >NUL "%arc7z%" a -mx9 -y -o"%NewArcPath%" "%NewArcPath%\!arc[%%C]!.7z" "!path[%%C]!" && (echo Success.) || (echo !!! FAILED !!! & pause>NUL)
)
echo.
echo Finished.
pause
Восклицательные знаки в путях указывать будет нельзя.
1
NeoMatrix
Модератор
Эксперт NIX
4658 / 1187 / 86
Регистрация: 24.05.2011
Сообщений: 10,411
Записей в блоге: 2
13.12.2017, 19:20  [ТС] 6
Цитата Сообщение от YuS_2 Посмотреть сообщение
системную переменную %path%, лучше в таких действиях не использовать
Как бы вам объяснить?
Джентльмены, вы меня извиняйте - я вообще не особо хорошо разбираюсь в этом деле. И к тому же, исходя их этого, не очень хорошо объясняю, что мне нужно, видимо...
Системные переменные я здесь не использую совсем. В случае с %path% здесь имеется ввиду путь к каталогу в котором лежат эти самые базы, но он нигде в системе в переменных окружения не должен фигурировать (для системы это просто папка с файлами) - не прописан он в переменных окружения. То бишь, мне как-то надо прописать его прямо в скрипте в явном абсолютном виде:
Windows Batch file
1
2
3
4
5
6
7
8
D:\Базы Данных\Базы 1С\ООО Вектор\Радуга\Зарплата\
D:\Базы Данных\Базы 1С\ООО Вектор\Радуга\Склад\
D:\Базы Данных\Базы 1С\ООО Вектор\Радуга\Розница\
D:\Базы Данных\Базы 1С\ООО Вектор\Колибри\Склад\
D:\Базы Данных\Базы 1С\ООО ВекторПлюс\Колибри\Зарплата\
E:\БД\Старые\1С\ООО Вектор\Радуга\Зарплата\
E:\БД\Старые\1С\ООО Вектор\Радуга\Склад\
E:\БД\Старые\1С\ООО Вектор\Радуга\Розница\
и так далее. В путях - полнейший бардак.
Поэтому я и прошу показать мне где и как их прописать в абсолютном виде.

Ещё раз прошу прощения - это целиком моя вина - я пытался не грузить вас излишними подробностями, Надеялся, что нужные значения подставлю сам вручную, просто скопипастив их в скрипт.
Но я реально не понял, как это сделать с данным Dragokas скриптом.

В общем и целом, я понимаю, что значит системная %path%, что её в данном случае использовать совершенно не нужно, да и, кроме того - небезопасно для стабильности виндовс.Также, я догадываюсь, что твой, дружище Dragokas, скрипт будет работать пока ктулху не фтагн, но я, откровенно, его не понимаю. Точнее - не весь. А именно - откуда скрипт берёт пути к исходным папкам с базами.

А общий план действий у меня был такой:
1 В пятницу вечером бухгалтер оставляет машинку работать, а не выключает.
2 В 17:05 планировщик запускает скрипт, который выполняет архивацию.
3 После завершения архивации в какой-нибудь файлик пишется результат (когда выполнялась архивация, результат - успешно или нет)
4 После этого машинка выключается.

Цитата Сообщение от Dragokas Посмотреть сообщение
Восклицательные знаки в путях указывать будет нельзя.
В путях есть кириллица в обоих регистрах, латиница в обоих регистрах, пробелы. Возможно, дефисы.
Других символов нет. Если это сложно - я могу переписать пути руками одной латиницей в нижнем регистре без пробелов - не проблема.
0
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
13.12.2017, 19:32 7
Лучший ответ Сообщение было отмечено NeoMatrix как решение

Решение

Цитата Сообщение от NeoMatrix Посмотреть сообщение
В путях есть кириллица в обоих регистрах, латиница в обоих регистрах, пробелы. Возможно, дефисы.
Это всё допускается. Только файл нужно сохранять в кодировке oem-866. См.: Русский текст в консоли

Пути прописываются здесь:
Цитата Сообщение от Dragokas Посмотреть сообщение
set path[1]=g:\1\DB1
set arc[1]=DataBases1
set path[2]=g:\1\DB2
set arc[2]=DataBases2
path - путь
arc - имя архива, куда будет упаковано.

Добавлено через 38 секунд
если путей более двух, меняешь эту цифру:
Цитата Сообщение от Dragokas Посмотреть сообщение
:: Кол-во путей
set PathCnt=2
1
NeoMatrix
Модератор
Эксперт NIX
4658 / 1187 / 86
Регистрация: 24.05.2011
Сообщений: 10,411
Записей в блоге: 2
13.12.2017, 19:46  [ТС] 8
То есть, я смело могу заменить g:\1\DB1 на D:\Базы Данных\Базы 1С\ООО Вектор\Радуга\Розница\?
Но только останется посчитать количество путей для сохранения?

Просто великолепно!
Спасибо сердечное!
0
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
13.12.2017, 19:52 9
Da
1
NeoMatrix
Модератор
Эксперт NIX
4658 / 1187 / 86
Регистрация: 24.05.2011
Сообщений: 10,411
Записей в блоге: 2
13.12.2017, 20:29  [ТС] 10
Цитата Сообщение от Dragokas Посмотреть сообщение
Windows Batch file
1
2
3
4
5
:: каталог с предыдущей версией архива 
set NewArcPath=H:\Arhives\New 
 
:: каталог с новой версией архива 
set OldArcPath=H:\Arhives\Old
А тут путаницы нет, случаем?
0
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
13.12.2017, 20:40 11
Ну да, комментарии местами поменяй.
1
SNK_2015
1 / 1 / 0
Регистрация: 13.12.2015
Сообщений: 1
13.12.2017, 21:32 12
Надо ещё отсеять .cdx индексные файлы 1с7.7, т.к. в архиве они тоже занимают место, а совсем не нужны
1
YuS_2
Любознательный
855 / 565 / 181
Регистрация: 10.03.2016
Сообщений: 1,292
14.12.2017, 00:55 13
В качестве альтернативы (нет ограничений в используемых символах, не нужен дополнительный архиватор и т.п.):

run.bat
Windows Batch file
1
2
3
4
5
@echo off
echo Выполняем...
powershell -executionpolicy bypass .\script.ps1
echo Готово.
pause
script.ps1
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
add-type -as "system.io.compression.filesystem"
# Массив каталогов для архивации
$src = 'd:\!Каталог с пробелами\1\','e:\Каталог\2\'
# Путь и наименование текущих архивных файлов
$arc = 'c:\Temp\!arch\'
$nm = 'archive'
# Путь к каталогу со старыми архивами
$old = 'c:\Temp\!arch_old\'
# Создаем нумерованные архивы с проверками путей
$cnt = 0
$src|%{
    $cnt++
    if((
        test-path $_ -pathtype container
    ) -and (
        test-path $arc -pathtype container
    ) -and (
        test-path $old -pathtype container
    )){
        $a = $arc + $nm + "_" + $cnt + ".zip"
        if (test-path $a){mi $a $old -force}
        [io.compression.zipfile]::createfromdirectory($_, $a)
    } else {
        "Ошибка в перечне путей к каталогам. Возможно, это N"+$cnt
    }
}
1
сновидящий
18 / 0 / 3
Регистрация: 29.01.2014
Сообщений: 179
14.12.2017, 01:18 14
нет, путанницы нет
0
14.12.2017, 01:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2017, 01:18

Выбор папки из каталога
Ребят подскажите как реализовать выбор папки для последующего копирования из...

Проверка существования каталога
Привет всем. Есть каталог o:\2012-11 Это год и месяц соответственно, в конце...

Создание каталога по расширению
Как в cmd создать каталог по расширению? Т.е. Если у меня НАПРИМЕР 3 типа:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru