|
Как заставить 7zip убить битый архив при ADD 🠗 (Волшебник 29.06.2022 10:29) | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
28.06.22
✎
08:31
|
Использую команду архивации:
"C:\Program Files\7-Zip\7z.exe" a -tzip -ssw -y "C:\backup\ut11work\1cv8_%date:~1,1%.zip" "C:\1C\Bases\trade\1cv8.1CD" Все замечательно, бэкапит на лету. но есть один нюанс, если выполнение прервется на середине, останется битый (недописанный архив). Какой ключ можно указать, чтобы убить такой архив? Он блокирует добавление в него. Только удаление помогает. но хочется одной командой, чтобы засунуть ее в планировщик. |
|||
1
Йохохо
28.06.22
✎
08:39
|
зачем доделывать кривое..
|
|||
2
2S
28.06.22
✎
08:42
|
(0) чой-то ты сегодня с утра, никакого покоя
|
|||
3
NorthWind
28.06.22
✎
08:43
|
Одной командой вряд ли получится. Если только t для тестирования, проверить errorlevel и в случае необходимости сделать удаление.
|
|||
4
NorthWind
28.06.22
✎
08:46
|
Вот тут обсуждение на эту тему
https://sourceforge.net/p/sevenzip/discussion/45798/thread/25bb18fb/ в принципе, предлагается годный вариант - запускать еще один скрипт, который будет проводить тестирование и удаление плохих архивов по всему списку. Соответственно, в следующий раз имя файла будет свободно и архив сделается нормально. |
|||
5
vovastar
28.06.22
✎
09:02
|
(2) ПМС же.
|
|||
6
DJ Anthon
28.06.22
✎
09:04
|
(2) как скрыть темы от гения?
|
|||
7
DJ Anthon
28.06.22
✎
09:05
|
(4) годный вариант - купить винрар, у него есть такая функция
|
|||
8
vbus
28.06.22
✎
09:10
|
Все просто
echo Exit Code is %errorlevel% Exit Codes from 7-Zip Code Meaning 0 No error 1 Warning (Non fatal error(s)). For example, one or more files were locked by some other application, so they were not compressed. 2 Fatal error 7 Command line error 8 Not enough memory for operation 255 User stopped the process |
|||
9
NorthWind
28.06.22
✎
09:22
|
впрочем, похоже на то, что разбирать еррорлевел оченно тяжело для гениев... :)
|
|||
10
lodger
28.06.22
✎
09:26
|
(0) купи уже обновлятор, там уже всё есть.
|
|||
11
NorthWind
28.06.22
✎
09:29
|
(10) так это ж деньги тратить надо. Он их лучше себе возьмет, а хозяину скажет что все настроил... Что, в принципе, верный подход, купить и дурак купит, только деньги при этом пойдут не туда куда надо.
|
|||
12
ptiz
28.06.22
✎
09:47
|
(0) С чего это прервется?
Надежный способ один: 1) делаем архив 2) пишет файл-флаг завершения 3) отдельным процессом проверяем файл-флаг и убиваем архив, если флага нет |
|||
13
Lama12
28.06.22
✎
10:25
|
(0) А может использовать готовое решение наподобие Cobian backup?
|
|||
14
lodger
28.06.22
✎
10:33
|
(11) он может прокинуть 950 рублей Милькину, и сам взять 1000р за настройку. без шума и пыли.
или взять 2000р себе и сношать нам тут моск. |
|||
15
Гений 1С
гуру
28.06.22
✎
11:03
|
(14) я использую обновлятор, но в плане бэкапа его еще не щупал. Не уверен, что там хорошо сделано.
|
|||
16
Гений 1С
гуру
28.06.22
✎
11:11
|
(7) винрар не умеет на лету копировать вроде как.
|
|||
17
Aleksey
28.06.22
✎
11:12
|
(13) Cobian backup не советую, у нового автора случился "Путин головного мозга", и кто его знает что он в последних релизах дописал, так что можно получить что он не бекапить, а портит файлы
|
|||
18
Гений 1С
гуру
28.06.22
✎
11:12
|
(8) все еще проще, я могу убить архив до его обновления. хочется в одной команде.
|
|||
19
Гений 1С
гуру
28.06.22
✎
11:12
|
(17) да, многие софты счас не проходят проверку на вшивость, та же винда.
|
|||
20
PLUT
28.06.22
✎
13:18
|
(19) а некоторыми софтами приходится пользоваться с презрением, да?
|
|||
21
NorthWind
28.06.22
✎
13:46
|
(20) он пользуется софтами, но делает это без уважения :)
|
|||
22
dangerouscoder
28.06.22
✎
14:18
|
(0) скопируй файл - проверь потом архивируй
|
|||
23
Гений 1С
гуру
28.06.22
✎
15:01
|
(22) это больше одной строки
|
|||
24
Garykom
гуру
28.06.22
✎
15:18
|
Геня учи уже Golang https://pkg.go.dev/archive/zip
И напиши свой 7zip, с какими тебе надо параметрами |
|||
25
Gary417
28.06.22
✎
15:29
|
(24) вообще надо форкнуть на гитхабе проект и добавить свой ключ, судя по задаче это будет проще и гораздо более правильно
|
|||
26
Йохохо
28.06.22
✎
15:32
|
(25) проще чем батник в C:\backup\ut11work\
|
|||
27
Gary417
28.06.22
✎
15:34
|
(26) ну вообще проще, учитывая что он легких путей не ищет, и для него важно в одну строчку написать (23)
|
|||
28
Garykom
гуру
28.06.22
✎
15:43
|
Лично я всегда делаю новое имя файла архива из дата-время
Старые же архивы удаляю отдельным заданием если есть более новые |
|||
29
Chai Nic
28.06.22
✎
15:45
|
(17) Да он не обновлялся уже лет 5..
|
|||
30
Гений 1С
гуру
28.06.22
✎
15:46
|
(28) на чем пишешь такие умные скрипты?
|
|||
31
Garykom
гуру
28.06.22
✎
15:53
|
(30) cmd или sh вполне хватает
|
|||
32
Злопчинский
29.06.22
✎
00:17
|
(17) а какая версия Кобиана псоледняя нормальна рабочая без проблем с мозгом у автора?
|
|||
33
vbus
29.06.22
✎
07:18
|
(28) А копии есть? вопрос сколько иметь копий. Например несколько выходных, база не хорошо изменилась и нормальная резервная копия будет затерта.
|
|||
34
DJ Anthon
29.06.22
✎
09:51
|
(30) на чем их еще писать?
echo off Setlocal EnableDelayedExpansion set base=%1% if NOT DEFINED base echo Утилита архивирования 4.3 баз данных 1С 7.7 и 8.x if NOT DEFINED base echo ======================== ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ================================= if NOT DEFINED base echo Backup Base if NOT DEFINED base echo Backup Base /F c:\1SBases\Base d:\1SBases\1SUS\Archive b:\Archive if NOT DEFINED base echo Backup Base /F c:\1SBases\Base d:\1SBases\1SUS\Archive b:\Archive User if NOT DEFINED base echo Backup Base /F c:\1SBases\Base d:\1SBases\1SUS\Archive b:\Archive User Pass if NOT DEFINED base echo Backup Base /F \\SERVER\Base \\SERVER\Archive User Pass C:\WinRAR\WinRAR.exe C:\BIN\1cv7s.exe if NOT DEFINED base echo Backup Base /S SERVER\Base d:\1SBases\Archive if NOT DEFINED base echo. if NOT DEFINED base echo ================================ ВНИМАНИЕ ====================================== if NOT DEFINED base echo Для использования автоматического закрытия процессов 1С 8.х в серверном вариантедобавьте в файл c:\ProgramData\1C\1CEStart\1CEStart.cfg путь к файлу общих баз if NOT DEFINED base echo CommonInfoBases=C:\ProgramData\1C\1CEStart\common.v8i if NOT DEFINED base echo. if NOT DEFINED base echo ============================ ИСТОРИЯ ВЕРСИЙ ==================================== if NOT DEFINED base echo 4.3 (17.11.2018): Серверные выгрузки теперь упаковываются в архивы по 100 МБ if NOT DEFINED base echo =============================================================================== if NOT DEFINED base pause if NOT DEFINED base echo 4.2 (12.09.2018): Исправлена проверка настройки реестра при смене пользователя if NOT DEFINED base echo 4.1 (10.04.2018): Добавлено автоотключение регламентных заданий if NOT DEFINED base echo 4.0 (03.04.2018): Добавлен дополнительный путь архивации, архивы разбиваются if NOT DEFINED base echo по 100 Мб, добавлены команды для управления скрытыми разделами if NOT DEFINED base echo 3.6 (11.02.2018): Оставляется цепочка архивов до 9 файлов одного типа (автовыбор zip, dt, rar). Увеличен таймаут ожидания 1С Конфигуратора if NOT DEFINED base echo 3.5 (30.06.2017): Дополнительно удаляются неудавшиеся файлы архивации 1С *.n1 if NOT DEFINED base echo 3.4 (31.08.2016): Исправлен баг с поиском процессов серверных баз 1cv82/1cv8. if NOT DEFINED base echo 3.3 (13.04.2016): Добавлена поддержка переходных платформ 1С 1cv82/1cv8. if NOT DEFINED base echo 3.2 (01.04.2016): Добавлена возможность автоматического закрытия соединений серверных баз данных 1С if NOT DEFINED base echo 3.1 (27.03.2016): Добавлена автоматическая архивация WinRAR при неудачной выгрузке 1С if NOT DEFINED base echo 3.0 (24.03.2016): Добавлена возможность автозакрытия файловых баз данных 1С и автоматическая регистрация настроек 1С и архивации в реестре if NOT DEFINED base echo 2.2 (08.03.2016): Добавлена поддержка платформы 1С 8.3 if NOT DEFINED base echo 2.1 (10.03.2016): Добавлена поддержка платформы 1С 8.2 if NOT DEFINED base echo 2.0 (09.06.2014): Добавлено сохранение архива перед созданием нового if NOT DEFINED base echo 1.1 ( 2013): Добавлена архивация WinRAR if NOT DEFINED base echo 1.0 ( 2013): Первый релиз. Архивация баз данных на платформе 1С 7.7 if NOT DEFINED base echo =============================================================================== if NOT DEFINED base pause if NOT DEFINED base exit set mode=%2% if NOT DEFINED mode echo Не указано, файловая или серверная база, принята как файловая по умолчанию. if NOT DEFINED mode set mode=/F set bp=%3% if NOT DEFINED bp echo Не указан путь к базе! Путь принят по умолчанию (D:\1SBases\%base%) if NOT DEFINED bp if %mode%==/F (set bp=D:\1SBases\%base%) else set bp=SERVER\%base% set ap1=%4% if NOT DEFINED ap1 echo Не указан путь архивации! Путь принят по умолчанию (D:\1SBases\Archive) if NOT DEFINED ap1 set ap1=D:\1SBases\1SUS\Archive set str1=%5% if DEFINED str1 set str2=%str1:\=% if NOT DEFINED str1 set str1=1 if NOT DEFINED str2 set str2=1 if DEFINED str1 if %str1%==%str2% goto NOAP2 set ap2=%5% if DEFINED ap2 echo Обнаружен второй путь архивации %ap2% if DEFINED ap2 echo По второму пути будет выполнена архивация только в виде полного архива WinRAR с одной копией. set user=%6% set fuck=%7% set pathWinRAR=%8% if NOT DEFINED pathWinRAR set pathWinRAR="C:\Program Files\WinRAR\WinRAR.exe" set path1c7=%9% goto endset :NOAP2 rem echo поехали по 2 if NOT DEFINED ap2 echo Второй путь архивации не указан. set user=%5% set fuck=%6% set pathWinRAR=%7% if NOT DEFINED pathWinRAR set pathWinRAR="C:\Program Files\WinRAR\WinRAR.exe" set path1c7=%8% :endset if NOT DEFINED path1c7 set path1c7="C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe" if not exist %path1c7% set path1c7="C:\Program Files\1Cv77\BIN\1cv7s.exe" set path1c8="c:\Program Files\1cv8\common\1cestart.exe" if not exist %path1c8% set path1c8="c:\Program Files (x86)\1cv8\common\1cestart.exe" if not exist %path1c8% set path1c8="c:\Program Files\1cv82\common\1cestart.exe" if not exist %path1c8% set path1c8="c:\Program Files (x86)\1cv82\common\1cestart.exe" set longtime=%time:~0,8% set t=%longtime: =0% set t=%t::=% reg QUERY "HKCU\Software\Sysinternals\Handle" /v EulaAccepted >> nul 2>>nul if NOT ERRORLEVEL 1 goto readyreg echo Настройка реестра... reg QUERY "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB" >> nul 2>>nul if ERRORLEVEL 1 reg ADD "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB" /f reg QUERY "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB" /v TipOfTheDayGlobal >> nul 2>>nul if ERRORLEVEL 1 reg ADD "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB" /v TipOfTheDayGlobal /t REG_SZ /d "0" /f reg QUERY "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB\Anthon" >> nul 2>>nul if ERRORLEVEL 1 reg ADD "HKCU\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB\Anthon" reg QUERY "HKCU\Control Panel\Desktop" >> nul 2>>nul if ERRORLEVEL 1 reg ADD "HKCU\Control Panel\Desktop" /f reg QUERY "HKCU\Control Panel\Desktop" /v AutoEndTasks >> nul 2>>nul if ERRORLEVEL 1 reg ADD "HKCU\Control Panel\Desktop" /v AutoEndTasks /t REG_SZ /d "1" /f reg QUERY "HKCU\Software\Sysinternals\Handle" >> nul 2>>nul if ERRORLEVEL 1 reg ADD "HKCU\Software\Sysinternals\Handle" /f reg QUERY "HKCU\Software\Sysinternals\Handle" /v EulaAccepted >> nul 2>>nul if ERRORLEVEL 1 reg ADD "HKCU\Software\Sysinternals\Handle" /v EulaAccepted /t REG_DWORD /d 1 /f reg QUERY "HKU\S-1-5-18\Software\Sysinternals\Handle" >> nul 2>>nul if ERRORLEVEL 1 reg ADD "HKU\S-1-5-18\Software\Sysinternals\Handle" /f reg QUERY "HKU\S-1-5-18\Software\Sysinternals\Handle" /v EulaAccepted >> nul 2>>nul if ERRORLEVEL 1 reg ADD "HKU\S-1-5-18\Software\Sysinternals\Handle" /v EulaAccepted /t REG_DWORD /d 1 /f :readyreg set ap1=%ap1%\%base% if DEFINED ap2 set ap2=%ap2%\%base% echo Поиск пути архивации %ap1%\... if not exist %ap1% (md %ap1%) if not exist %ap1% echo Не удалось найти путь архивации, упаковка прекращена. if not exist %ap1% ping -n 10 127.0.0.1 > nul if not exist %ap1% goto end echo Удаляем старые архивы, кроме последнего... if exist %ap1%\*.n1 del %ap1%\*.n1 if exist %ap1%\*.zip if exist %ap1%\*.oldz del %ap1%\*.oldz for /R %ap1%\ %%i in (*.zip) DO ( ren %%~dpi%%~nxi %%~ni.oldz ) if exist %ap1%\*.dt if exist %ap1%\*.oldt del %ap1%\*.oldt for /R %ap1%\ %%i in (*.dt) DO ( ren %%~dpi%%~nxi %%~ni.oldt ) if exist %ap1%\*.rar if exist %ap1%\*.oldr del %ap1%\*.oldr for /R %ap1%\ %%i in (*.rar) DO ( ren %%~dpi%%~nxi %%~ni.oldr ) if NOT DEFINED ap2 goto NOOLD if exist %ap2%\*.n1 del %ap2%\*.n1 if exist %ap2%\*.zip if exist %ap2%\*.old9 del %ap2%\*.old9 if exist %ap2%\*.rar if exist %ap2%\*.old9 del %ap2%\*.old9 if exist %ap2%\*.dt if exist %ap2%\*.old9 del %ap2%\*.old9 if exist %ap2%\*.dt for /R %ap2%\ %%i in (*.old8) DO ren %%~dpi%%~nxi %%~ni.old9 if exist %ap2%\*.dt for /R %ap2%\ %%i in (*.old7) DO ren %%~dpi%%~nxi %%~ni.old8 if exist %ap2%\*.dt for /R %ap2%\ %%i in (*.old6) DO ren %%~dpi%%~nxi %%~ni.old7 if exist %ap2%\*.dt for /R %ap2%\ %%i in (*.old5) DO ren %%~dpi%%~nxi %%~ni.old6 if exist %ap2%\*.dt for /R %ap2%\ %%i in (*.old4) DO ren %%~dpi%%~nxi %%~ni.old5 if exist %ap2%\*.dt for /R %ap2%\ %%i in (*.old3) DO ren %%~dpi%%~nxi %%~ni.old4 if exist %ap2%\*.dt for /R %ap2%\ %%i in (*.old2) DO ren %%~dpi%%~nxi %%~ni.old3 if exist %ap2%\*.dt for /R %ap2%\ %%i in (*.old1) DO ren %%~dpi%%~nxi %%~ni.old2 if exist %ap2%\*.dt for /R %ap2%\ %%i in (*.zip) DO ren %%~dpi%%~nxi %%~ni.old1 if exist %ap2%\*.dt for /R %ap2%\ %%i in (*.rar) DO ren %%~dpi%%~nxi %%~ni.old1 if exist %ap2%\*.dt for /R %ap2%\ %%i in (*.dt) DO ren %%~dpi%%~nxi %%~ni.old1 :NOOLD echo Анализ %bp%\... if %mode%==/S echo Обнаружена серверная база 1С 8, попытка выгрузки... if %mode%==/S goto v8s if exist %bp%\1Cv8.1CD echo Обнаружена файловая база 1С 8, попытка выгрузки... if exist %bp%\1Cv8.1CD goto v8f if exist %bp%\1cv7.md echo Обнаружена файловая база 1С 7.7, попытка выгрузки... if exist %bp%\1cv7.md goto v77 if exist %pathWinRAR% echo Упаковка каталога с помощью WinRAR... if exist %pathWinRAR% goto RAR goto end :v77 echo [General] > %ap1%\%base%.dat echo UnloadData=Y >> %ap1%\%base%.dat echo AutoExchange=N >> %ap1%\%base%.dat echo Output=%ap1%\(%base%)%DATE%-%t%.txt >> %ap1%\%base%.dat echo [UnloadData] >> %ap1%\%base%.dat echo UnloadToFile=%ap1%\(%base%)%DATE%-%t%.zip >> %ap1%\%base%.dat rem echo Password=123456789 >> %ap1%\%base%.dat if exist %bp%\MD_CHANGER\md_changer.ini ren %bp%\MD_CHANGER\md_changer.ini md_changer!.ini if exist %ap1%\%base%.zip del %ap1%\%base%.zip if exist %ap1%\%base%err.txt del %ap1%\%base%err.txt echo Выгрузка базы %base% в файл %ap1%\%base%.zip if not exist %ap1%\Logs md %ap1%\Logs if exist %ap1%\*.txt move %ap1%\*.txt %ap1%\Logs if exist %ap1%\*.zip ren %ap1%\*.zip *.old if exist %ap1%\*.rar ren %ap1%\*.rar *.old if exist %ap1%\Logs\*.txt xcopy %ap1%\Logs\*.txt %ap1%\Logs\*.old /Y if exist %ap1%\Logs\*.txt del %ap1%\Logs\*.txt /Q set lock=1Cv7.lck echo Проверка на наличие запущенных экземпляров программы 1С 7.7... if exist %bp%\%lock% del %bp%\%lock% /Q ping -n 2 127.0.0.1 > nul if not exist %bp%\%lock% goto ready7 echo Отправка процессам 1С команду на закрытие... handle %bp%\%lock% > pids.txt set was= for /F "tokens=3 skip=5" %%i in (pids.txt) do ( if NOT %%i == !was! taskkill /PID %%i /T set was=%%i ) echo Ожидание 90 секунд закрытия процессов 1C... ping -n 90 127.0.0.1 > nul if not exist %bp%\%lock% goto ready7 echo Закрытие зависших процессов 1C... handle %bp%\%lock% > pids.txt set was= for /F "tokens=3 skip=5" %%i in (pids.txt) do ( if NOT %%i == !was! taskkill /F /PID %%i /T set was=%%i ) if exist %bp%\%lock% del %bp%\%lock% :ready7 if exist pids.txt del pids.txt if DEFINED user set user=/N%user% if DEFINED fuck set fuck=/P%fuck% if exist %path1c7% (%path1c7% config /m /D%bp% %user% %fuck% /@%ap1%\%base%.dat) if exist %bp%\MD_CHANGER\md_changer!.ini ren %bp%\MD_CHANGER\md_changer!.ini md_changer.ini rem if exist %ap1%\*.txt move %ap1%\*.txt %ap1%\Logs if exist %ap1%\%base%.dat del %ap1%\%base%.dat if not exist %ap1%\(%base%)%DATE%-%t%.zip echo Не удалось выгрузить базу %base%. Возможно, не закрыты все подключения к ней. Упаковываем каталог с базой целиком.... if not exist %ap1%\(%base%)%DATE%-%t%.zip ping -n 5 127.0.0.1 > nul if exist %ap1%\(%base%)%DATE%-%t%.zip echo Выгрузка успешно завершена! if exist %ap1%\(%base%)%DATE%-%t%.zip ping -n 2 127.0.0.1 > nul if exist %ap1%\(%base%)%DATE%-%t%.zip goto add goto wrong :v8s set cfgpath=c:\ProgramData\1C\1CEStart\1CEStart.cfg if not exist %cfgpath% ( echo Не найден файл настроек 1С %cfgpath%) & (goto ready8) TYPE %cfgpath% > 1CEStart.txt for /F %%i in (1CEStart.txt) do set %%i del 1CEStart.txt if NOT DEFINED CommonInfoBases ( echo Не указан путь к файлу общих баз в файле настроек 1С %cfgpath%) & (goto ready8) if not exist %CommonInfoBases% ( echo Не найден файл общих баз 1С %CommonInfoBases%) & (goto ready8) TYPE %CommonInfoBases% > common.txt rem for /F %%i in (common.txt) do set %%i set foundbase=0 set foundsql=0 for /F %%i in (common.txt) do ( set full=%%i set cut=!full:%base%=! if NOT !full! == !cut! set foundbase=1 set cut=!full:Ref=! if NOT !full! == !cut! set foundsql=1 set cut=!full:ID=! if NOT !full! == !cut! if !foundbase!==1 if !foundsql!==1 set %%i if NOT !full! == !cut! set foundbase=0 if NOT !full! == !cut! set foundsql=0 ) del common.txt if NOT DEFINED ID ( echo Не найдено базы 1С с наименованием %base% в файле %CommonInfoBases%) & (goto ready8) for /d %%B in (%SystemDrive%\Users\*) do ( set lck="%%B\AppData\Roaming\1C\1Cv82\%ID%\1Cv8.lck" if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! echo Найден процесс 1С в каталоге %%B, отправка команды закрытия... if exist !lck! handle !lck! > pids.txt if exist !lck! for /F "tokens=1,2 skip=5 eol=t delims=:omt" %%i in (pids.txt) do taskkill /PID %%j /T if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! echo Ожидание закрытия процессов 1C, максимум 10 с... for /L %%A in (0,1,10) do ( if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! ping -n 2 127.0.0.1 > nul ) if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! echo Принудительное закрытие зависших процессов 1C... if exist !lck! handle !lck! > pids.txt if exist !lck! for /F "tokens=1,2 skip=5 eol=t delims=:omt" %%i in (pids.txt) do taskkill /F /PID %%j /T if exist !lck! echo Ожидание закрытия зависших процессов 1C, максимум 5 с... for /L %%A in (0,1,5) do ( if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! ping -n 2 127.0.0.1 > nul ) if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! echo Невозможно закрыть процесс, заблокировавший файл !lck! ) rem Повторение - мать заикания. for /d %%B in (%SystemDrive%\Users\*) do ( set lck="%%B\AppData\Roaming\1C\1Cv8\%ID%\1Cv8.lck" if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! echo Найден процесс 1С в каталоге %%B, отправка команды закрытия... if exist !lck! handle !lck! > pids.txt if exist !lck! for /F "tokens=1,2 skip=5 eol=t delims=:omt" %%i in (pids.txt) do taskkill /PID %%j /T if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! echo Ожидание закрытия процессов 1C, максимум 10 с... for /L %%A in (0,1,10) do ( if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! ping -n 2 127.0.0.1 > nul ) if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! echo Принудительное закрытие зависших процессов 1C... if exist !lck! handle !lck! > pids.txt if exist !lck! for /F "tokens=1,2 skip=5 eol=t delims=:omt" %%i in (pids.txt) do taskkill /F /PID %%j /T if exist !lck! echo Ожидание закрытия зависших процессов 1C, максимум 5 с... for /L %%A in (0,1,5) do ( if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! ping -n 2 127.0.0.1 > nul ) if exist !lck! del !lck! /Q >> nul 2>>nul if exist !lck! echo Невозможно закрыть процесс, заблокировавший файл !lck! ) goto ready8 :v8f set lock=1Cv8tmp.1CL if not exist %bp%\%lock% goto ready8 if exist %bp%\%lock% del %bp%\%lock% /Q >> nul 2>>nul if not exist %bp%\%lock% goto ready8 echo Отправка процессам 1С команду на закрытие... handle "%bp%\%lock%" > pids.txt set was= for /F "tokens=3 skip=5" %%i in (pids.txt) do ( if NOT %%i == !was! taskkill /PID %%i /T set was=%%i ) if exist %bp%\%lock% echo Ожидание закрытия процессов 1C, максимум 10 с... for /L %%A in (0,1,10) do ( if exist %bp%\%lock% del %bp%\%lock% /Q >> nul 2>>nul if exist %bp%\%lock% ping -n 2 127.0.0.1 > nul ) if not exist %bp%\%lock% goto ready8 echo Закрытие зависших процессов 1C... handle "%bp%\%lock%" > pids.txt set was= for /F "tokens=3 skip=5" %%i in (pids.txt) do ( if NOT %%i == !was! taskkill /F /PID %%i /T set was=%%i ) if exist %bp%\%lock% echo Ожидание закрытия зависших процессов 1C, максимум 5 с... for /L %%A in (0,1,5) do ( if exist %bp%\%lock% del %bp%\%lock% /Q >> nul 2>>nul if exist %bp%\%lock% ping -n 2 127.0.0.1 > nul ) :ready8 if exist pids.txt del pids.txt /Q if not exist %ap1%\Logs md %ap1%\Logs if exist %ap1%\Logs\*.txt ren %ap1%\Logs\*.txt *.old if exist %ap1%\*.txt move %ap1%\*.txt %ap1%\Logs if exist %ap1%\*.dt ren %ap1%\*.dt *.oldt if exist %ap1%\*.rar ren %ap1%\*.rar *.oldr if DEFINED ap2 if not exist %ap2%\Logs md %ap2%\Logs if DEFINED ap2 if exist %ap2%\Logs\*.txt ren %ap2%\Logs\*.txt *.old if DEFINED ap2 if exist %ap2%\*.txt move %ap2%\*.txt %ap2%\Logs echo Ожидание 30 секунд конфигуратора 1С для запуска выгрузки базы echo %bp% в файл echo %ap1%\(%base%)%DATE%-%t%.dt... if DEFINED user set user=/N"%user%" if DEFINED fuck set fuck=/P%fuck% %path1c8% CONFIG %mode% %bp% %user% %fuck% /DumpIB"%ap1%\(%base%)%DATE%-%t%.dt" /AllowExecuteScheduledJobs -off if exist %ap1%\*.txt move %ap1%\*.txt %ap1%\Logs ping -n 25 127.0.0.1 > nul :wait ping -n 5 127.0.0.1 > nul if exist %ap1%\(%base%)%DATE%-%t%.dt goto last if exist %ap1%\(%base%)%DATE%-%t%.n1 echo Выгрузка в процессе (n1)... if exist %ap1%\(%base%)%DATE%-%t%.n1 goto wait :last if not exist %ap1%\(%base%)%DATE%-%t%.dt if not exist %ap1%\(%base%)%DATE%-%t%.n1 goto wrong ren %ap1%\(%base%)%DATE%-%t%.dt (%base%)%DATE%-%t%.dt1 >> nul 2>>nul if not exist %ap1%\(%base%)%DATE%-%t%.dt1 echo Выгрузка в процессе (dt)... if not exist %ap1%\(%base%)%DATE%-%t%.dt1 goto wait ren %ap1%\(%base%)%DATE%-%t%.dt1 (%base%)%DATE%-%t%.dt >> nul 2>>nul echo Копирование данных на вторичный путь архивации... if DEFINED ap2 if exist %ap2%\*.zip del %ap2%\*.zip if DEFINED ap2 if exist %ap2%\*.dt del %ap2%\*.dt if DEFINED ap2 if exist %ap1%\*.zip copy %ap1%\*.zip %ap2% if DEFINED ap2 if exist %ap1%\*.dt copy %ap1%\*.dt %ap2% if %mode%==/F goto add if not exist %ap1%\Logs md %ap1%\Logs if exist %ap1%\*.rar del %ap1%\*.rar /Q %pathWinRAR% a -y -dh -ibck -ilog%ap1%\(%base%)%DATE%-%t%.txt -r %ap1%\(%base%)%DATE%-%t%.rar -m1 -v100M %ap1%\*.dt -x1Cv7.LCK if DEFINED ap2 if not exist %ap2%\Logs md %ap2%\Logs if DEFINED ap2 if exist %ap2%\*.rar del %ap2%\*.rar /Q if DEFINED ap2 %pathWinRAR% a -y -dh -ibck -ilog%ap2%\(%base%)%DATE%-%t%.txt -r %ap2%\(%base%)%DATE%-%t%.rar -m1 %ap1%\*.dt -x1Cv7.LCK goto end :wrong if exist %bp% echo Не удалось запустить выгрузку Конфигуратора 1С. Аварийная архивация с помощью WinRAR... if exist %bp% goto RAR if not exist %bp% goto end :add if exist %bp% echo Дополнительная архивация с помощью WinRAR... if exist %bp% goto RAR if not exist %bp% goto end :RAR if not exist %ap1%\Logs md %ap1%\Logs if exist %ap1%\*.rar del %ap1%\*.rar /Q %pathWinRAR% a -y -dh -ibck -ilog%ap1%\(%base%)%DATE%-%t%.txt -r %ap1%\(%base%)%DATE%-%t%.rar -m1 -v100M %bp% -x1Cv7.LCK if DEFINED ap2 if not exist %ap2%\Logs md %ap2%\Logs if DEFINED ap2 if exist %ap2%\*.rar del %ap2%\*.rar /Q if DEFINED ap2 %pathWinRAR% a -y -dh -ibck -ilog%ap2%\(%base%)%DATE%-%t%.txt -r %ap2%\(%base%)%DATE%-%t%.rar -m1 %bp% -x1Cv7.LCK :end echo Архивация завершена. ping -n 5 127.0.0.1 > nul |
|||
35
DJ Anthon
29.06.22
✎
09:52
|
сорян, что не под спойлер
|
|||
36
arsik
гуру
29.06.22
✎
09:54
|
(34) Это какой то пиздец.
В одну строчку ну никак не влезет :) И как потом с этой ебалой разбираться если логику нужно будет поменять? Повершелл наше все. |
|||
37
NorthWind
29.06.22
✎
09:59
|
(34) очень круто, но нифига не понятно. Я как-то больше для подобных вещей люблю VBS. Можно Python еще или PS.
|
|||
38
vbus
29.06.22
✎
10:10
|
(37) Что не понятно?,
if DEFINED fuck set fuck=/P%fuck% все понятно |
|||
39
DJ Anthon
29.06.22
✎
10:12
|
(37) большая часть кода позаимствована у Abrahams.
да, понять сложно )) 1. определяется тип базы и версия 1С 2. проверяется, открыта база или нет. 3. если открыта, то посылаются сигналы на закрытие и ожидание 4. если не дождались - убиваются. 5. выгрузка в dt с автоматической чисткой самого старого архива, хранится 10 копий 6. архивация в рар на два адреса (можно и один) с автоматической чисткой самого старого архива, хранится 10 копий работает и для обычных каталогов. лично мне два адреса нужны для того, чтобы первая копия оставалась у клиента на скрытом диске (+9 ее старых копий) а вторая копия резалась по 100 мегов и отправлялась по фтп сторонней утилитой (заметил, что многие фтп серверы раз в час могут затупить, а докачивать не умеют) вызывается это все другим батником типа echo off e: cd e:\1SBases\1SUS\Archive echo Подключение диска A:... mountvol A:\ \\?\Volume{642880c2-34e2-11e6-b7be-806e6f6e6963}\ ping -n 2 127.0.0.1 > nul cls call Backup.bat Accounting /F c:\1SBases\Accounting e:\1SBases\1SUS\Archive a:\Archive Архивация пароль call Backup.bat HRM /F c:\1SBases\HRM e:\1SBases\1SUS\Archive a:\Archive Архивация пароль call Backup.bat Общий /F e:\Общий a:\Archive shutdown -s -t 36000 cls |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |