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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
| <!-- : =================================
: Скрипт защищённого выключения системы
: + Архивирование + Удаление данных
: + Запароливание + Выключение системы
: ======================================
@echo off
title Защищённое выключение
rem ----------------------------
rem = Основные настройки =
rem ----------------------------
rem Цвет фона и текста стандартно
color 02
set color_def=02
rem Цвет фона и текста "Ошибки"
set color_error=CF
rem Цвет фона и текста "Успех"
set color_lucky=2F
rem Цвет фона и текста "Запрос"
set color_question=E0
rem Показ ошибок
set "ers=2>nul"
rem Показ информации
set "info=1>nul 2>&1"
rem ----------------------------
rem = Настройки приложений =
rem ----------------------------
rem Описание: процессы разделяются пробелами, процесс должен оканчиваться на .exe, перед первым процессом и после list_proc пробел не требуется
set list_proc=firefox.exe thunderbird.exe filezilla.exe FileZilla Server.exe notepad++.exe AkelPad.exe AIMP.exe vlc.exe WINWORD.EXE EXCEL.EXE POWERPNT.EXE AcroRd32.exe WinDjView.exe StrongDC.exe qip.exe Photoshop.exe Illustrator.exe BitTorrent.exe CamtasiaStudio.exe CamRecorder.exe Snagit32.exe SnagitEditor.exe
rem ----------------------------
rem = Настройки архивации =
rem ----------------------------
rem Путь до архиватора 7-Zip
set zip_app="C:\Program Files\7-Zip\7z.exe"
rem Исходная папка для архивации №1
set arch_sourcedir1=D:\ProfileX
rem Базовая директория - ЗАРЕЗЕРВИРОВАНО
set basedir=PATHX
rem Целевая папка для бекапа №1
set arch_destdir1=D:
rem Название архива бекапа №1 (формат 7z поддерживает ключ -mhe, с форматом zip нельзя использовать -mhe и некоторые другие ключи!)
set arch_name1=ProfileX.7z
rem Ключи архивирования №1
set zip_argum1=-bso0 -mx0 -r0 -ssw -t7z -mhe -y -p
rem Расположение и название лога №1
set logfile1=D:\Scripts\Backup.log
rem Формат даты и времени создания архива
set arch_date=%Year:~-5%.%Month:~-3%.%Day:~-3%_%Hour:~-3%-%Minute:~-3%-%Second:~-3%
rem ----------------------------
rem = Настройки ошибок =
rem ----------------------------
set error_arch1_not_found=Error: Архив бекапа %arch_name1% не найден, исходная папка %arch_sourcedir1% не удалена. Выключение отменено!
set error_sourcedir1_not_found=Error: Исходная папка %arch_sourcedir1% не найдена: новый бекап не создан, а старый бекап не удалён с диска, если имелся. Выключение отменено!
set error_arch1_y_sourcedir1_y=Error: Исходная папка %arch_sourcedir1% не удалена. Требуется удалить её, чтобы ей не воспользовались! Выключение отменено!
rem ----------------------------------------------------------------------------------------------------------------
rem КОНЕЦ НАСТРОЕК
rem ----------------------------------------------------------------------------------------------------------------
rem -----------------------------
rem = Техническое (не изменять) =
rem -----------------------------
rem Исправление пробела в поле "Час/Hour", если системное время менее 10 часов
for /f "tokens=1* delims==" %%a in ('"wmic path win32_localtime get Day,Month,Year,Hour,Minute,Second /value|find "^=""') do set "%%a=0%%b"
goto start
===============================================================================================================
rem Параметры для удаления старых бекапов
rem _____________________________________
rem Шаблон: cscript //Nologo Remove_Old_Logs.vbs 1 "E:\Backups\Folder\Folder" ALL
rem Remove_Old_Logs.vbs: название скрипта, удаляющего старые файлы
rem 7: число дней; если файл старше этого кол-ва дней, то он будет удалён из папки, указанной ниже
rem "E:\Backups\Folder\Folder" fi.+\.zip: путь в кавычках и название файла или часть (маска) названий файлов для удаления (пробел перед названием файла fi.+\.zip обязателен) (ниже шаблон):
rem Название файла file.zip - удаление только этого файла
rem Маска файла fi.+\.zip - удаление файлов, начинающихся с fi и заканчивающихся на .zip
rem Ключ ALL (вместо названия файла) - удаление всех файлов из папки, учитывая число дней из параметра (7)
rem !RemovedLogs.log: журнал выполнения скрипта
===============================================================================================================
:start
goto start2
===============================================================================================================
rem Ключи для архивации
rem ___________________
rem -ao{a|s|t|u} : параметр перезаписи файлов
rem -bb[0-3] : уровень показа процесса архивирования (0 - процент, 1 - строки и процент, 2 - строки и процент, 3 - строки и процент)
rem -bd : скрыть процесс задания во время выполнения архивации
rem -i : добавить файлы или папки в архив (пример -ir@include.txt или "-i!File.exe" "-i!*.dat")
rem -mhe : шифровать названия файлов
rem -mmt[N] : количество используемых потоков процессора (стандартно - без ключа; используются все потоки)
rem -mx[0-9] : уровень сжатия (0 - без сжатия, 9 - лучший уровень сжатия) (пример -mx3)
rem -o : задает директорию, в которую будут распакованы файлы
rem -p : задать пароль для архива (пример -p123456)
rem -r : рекурсивное архивирование для папок, задается числом от 0 (все каталоги) до количества уровней каталогов, которые нужно включить в архив (пример -r0)
rem -ssw : добавить файл в архив, даже если он в данный момент используется или редактируется
rem -t[zip,gz] : тип архива, по умолчанию создаются файлы в формате 7z (примеры -tzip, -tgz)
rem -w[{path}] : назначить рабочую директорию для временных архивов (пустое значение делает рабочей директорией ту, куда записывается архив)
rem -x : исключить файлы или папки из архива (пример -xr@exclude.txt или "-x!*.tmp" "-x!*.temp")
rem -y : утвердительно ответить на все вопросы, которые может запросить система во время архивации
rem Дополнительно:
rem %date% : добавить текущую дату к названию архива
===============================================================================================================
:start2
echo.
echo.
echo =====================
echo Завершение приложений
echo =====================
echo.
echo.
for %%a in (%list_proc%) do (taskkill /f /im "%%a")
echo.
echo.
echo ==========================
echo Удаление старых бекапов...
echo ==========================
echo.
echo.
echo Список удалённых файлов :
if exist "%arch_sourcedir1%\" cd /d "%arch_destdir1%\" && del /f /s /q "%arch_name1%"
echo Готово.
rem Возврат директории bat
cd "%~dp0"
echo.
echo.
echo ============================
echo Создание новых бекапов папок
echo ============================
echo.
echo.
rem Бекап папок
if not exist "%arch_sourcedir1%\" goto GT_final_bad
rem Удаление временных файлов
if exist "%arch_sourcedir1%\Temp\" %ers% cd /d "%arch_sourcedir1%\Temp\" && rd /s /q "%arch_sourcedir1%\Temp" %info%
echo + Временные файлы удалены!
rem Возврат директории bat
cd "%~dp0"
rem Задание пароля через HTA
for /f %%s in ('mshta %0') do set pass="%%s"
rem Выход, если пароль не задан
if not defined pass exit
rem Архивация
%zip_app% a "%arch_destdir1%\%arch_name1%" "%arch_sourcedir1%\" %zip_argum1%%pass%
rem Возврат директории bat
cd "%~dp0"
echo.
echo.
echo ===========================
echo Удаление архивируемых папок
echo ===========================
echo.
echo.
rem Получение размера ИСХОДНОЙ ПАПКИ в МБ и ГБ для сравнения с существующим ФАЙЛОМ БЕКАПА
rem Путь до исходной папки
set "getsize_folder1=%arch_sourcedir1%\"
rem Получение размера папки в МБ (/1048576)
cmd /q/u/c echo WSH.Quit CreateObject("Scripting.FileSystemObject").GetFolder("%getsize_folder1%").Size/1048576>%temp%\get_size_eof_fo_mb.vbs
cscript //Nologo %temp%\get_size_eof_fo_mb.vbs
set /a size_folder1=%errorlevel%
rem Удаление временного скрипта
del %temp%\get_size_eof_fo_mb.vbs
rem Получение размера существующего ФАЙЛА БЕКАПА в МБ и ГБ для сравнения с существующей ИСХОДНОЙ ПАПКОЙ
rem Путь до файла бекапа
set "getsize_file1=%arch_destdir1%\%arch_name1%"
rem Получение размера файла в МБ (/1048576)
cmd /q/u/c echo WSH.Quit CreateObject("Scripting.FileSystemObject").GetFile("%getsize_file1%").Size/1048576>%temp%\get_size_eof_fi_mb.vbs
cscript //Nologo %temp%\get_size_eof_fi_mb.vbs
set /a size_file1=%errorlevel%
rem Удаление временного скрипта
del %temp%\get_size_eof_fi_mb.vbs
rem Сравнение размеров исходной папки и нового бекапа
rem Смена цветов
color %color_question%
echo Сравнение размеров исходной папки и нового бекапа:
if exist "%arch_sourcedir1%\" (
echo %size_folder1% МБ - Размер папки %arch_sourcedir1%
) else (
goto GT_final_bad
)
if exist "%arch_destdir1%\%arch_name1%" (
echo %size_file1% МБ - Новый бекап %arch_name1%
) else (
goto GT_final_bad
)
rem Запрос на удаление исходной папки
echo.
echo.
echo Удалить =БЕЗВОЗВРАТНО= папку %arch_sourcedir1%?
echo [1] Да
echo [2] Нет
Choice /c 120 /n /m "Выбор: "
Set /A Sele=%ErrorLevel%
If %Sele% Equ 1 (
rem Смена цветов
color %color_def%
goto GT_del_dir_yes
)
If %Sele% Equ 2 (
goto GT_final_bad
)
:GT_del_dir_yes
rem Удаление папки ProfileX
if exist "%arch_destdir1%\%arch_name1%" (
cd /d "%arch_sourcedir1%\" && cd ..\
rd /s /q "%arch_sourcedir1%"
echo Готово.
) else (
goto GT_final_bad
)
rem Возврат директории bat
cd /d "%~dp0"
echo.
echo.
echo =========================================
echo Финальная очистка кэша и журналов системы
echo =========================================
echo.
echo.
rem Удаление временных системных файлов
if exist "%systemroot%\Temp\" %ers% cd /d "%systemroot%\Temp\" && rd /s /q "%systemroot%\Temp" %info%
if exist "%systemroot%\SoftwareDistribution\Download\" %ers% cd /d "%systemroot%\SoftwareDistribution\Download\" && rd /s /q "%systemroot%\SoftwareDistribution\Download" %info%
if exist "%systemroot%\ServiceProfiles\LocalService\AppData\Local\Temp\" %ers% cd /d "%systemroot%\ServiceProfiles\LocalService\AppData\Local\Temp\" && rd /s /q "%systemroot%\ServiceProfiles\LocalService\AppData\Local\Temp" %info%
if exist "%systemroot%\ServiceProfiles\NetworkService\AppData\Local\Temp\" %ers% cd /d "%systemroot%\ServiceProfiles\NetworkService\AppData\Local\Temp\" && rd /s /q "%systemroot%\ServiceProfiles\NetworkService\AppData\Local\Temp" %info%
echo + Временные файлы системы удалены!
rem Удаление временных файлов текущего пользователя
if exist "%programdata%\Temp\" %ers% cd /d "%programdata%\Temp\" && rd /s /q "%programdata%\Temp" %info%
if exist "%userprofile%\AppData\Local\Temp\" %ers% cd /d "%userprofile%\AppData\Local\Temp\" && rd /s /q "%userprofile%\AppData\Local\Temp" %info%
echo + Временные файлы текущего пользователя удалены!
rem Очистка системных журналов
%ers% WevtUtil cl "Application" %info%
%ers% WevtUtil cl "Security" %info%
%ers% WevtUtil cl "Setup" %info%
%ers% WevtUtil cl "System" %info%
%ers% WevtUtil cl "ForwardedEvents" %info%
%ers% WevtUtil cl "Internet Explorer" %info%
%ers% WevtUtil cl "Windows PowerShell" %info%
echo + Системные журналы очищены!
rem Очистка всех журналов
rem for /F "tokens=*" %%G in ('wevtutil.exe el') DO (call :clearing_journals "%%G")
rem echo + Системные журналы очищены!
rem goto endClearingJournals
rem :clearing_journals
rem rem echo Очистка журнала %1
rem wevtutil.exe cl %1
rem goto :eof
rem :endClearingJournals
rem Возврат директории bat
cd /d "%~dp0"
rem Финализация
if exist "%arch_destdir1%\%arch_name1%" if not exist "%arch_sourcedir1%" set check_files_yarch_nosourcedir=1
if defined check_files_yarch_nosourcedir (
rem Стиль экрана успеха
color %color_lucky%
echo.
echo.
echo ********************
echo АРХИВАЦИЯ ЗАВЕРШЕНА!
echo ********************
echo.
rem Пауза перед выключением
1>nul timeout /t 2 /nobreak
rem Выключение системы (закомментировать для тестирования скрипта)
shutdown /s /t 0 /d p:1:1 /f
) else (
goto GT_final_bad
)
exit
:GT_final_bad
rem Стиль экрана ошибки
color %color_error%
rem ***
echo.
echo.
echo *******************************
echo АРХИВАЦИЯ ЗАВЕРШЕНА С ОШИБКАМИ!
echo *******************************
echo.
echo ОШИБКИ
if not exist "%arch_destdir1%\%arch_name1%" (
echo %error_arch1_not_found%
rem %windir%\System32\msg.exe %username% "%error_arch1_not_found%"
)
if not exist "%arch_sourcedir1%" (
echo %error_sourcedir1_not_found%
rem %windir%\System32\msg.exe %username% "%error_sourcedir1_not_found%"
)
if exist "%arch_sourcedir1%\" if exist "%arch_destdir1%\%arch_name1%" set check_files_arch1_y_sourcedir1_y=1
if defined check_files_arch1_y_sourcedir1_y (
echo %error_arch1_y_sourcedir1_y%
rem %windir%\System32\msg.exe %username% "%error_arch1_y_sourcedir1_y%"
)
pause
exit
:: HTA от FlasherX -->
<meta charSet=Windows-1251>
<style>body{margin:0;padding:0}</style>
<script>
self.moveTo(Math.round(screen.width/2-170),Math.round(screen.height/2-115))
self.resizeTo(340,230)
function checkEnter() { if(event.keyCode == 13) checkPassw() }
function checkPassw() {
if (pass1.value == '' || pass2.value == '') return
if (pass1.value == pass2.value) {
with(new ActiveXObject('ADODB.Stream')) {
open; charset = 'cp866'
writeText(pass1.value + '\r'); position = 0
charset = 'unicode'; pass = readText; close()
}
try { new ActiveXObject('Scripting.FileSystemObject').getStandardStream(1,1).write(pass) }
catch(err){}; close()
} else {
pass1.focus()
pass1.value = ''; pass2.value = ''
text.style.color = 'e11111'
}
}
</script>
<HTA:APPLICATION Caption=no Border=none Scroll=no InnerBorder=no SingleInstance=yes/>
<style>* {font-size:14; padding:0; margin:0;}</style>
<body bgcolor=333333 style="color:000000; border:2 solid cccccc; padding:30 20;" onLoad=pass1.focus()>
<div style="background-color:ffffff; padding:10;">
<p style="font-weight:bold;">Задайте пароль для архива</p>
<input type=password name=pass1 style="width:100%; height:34px; font-size:14; color:2419c0; background-color:e8e8e8; padding:4px; margin-top:10;" onkeydown=checkEnter()>
<p style="float:left;">Повторить:</p>
<p id=text style="float:right; color:ffffff;">Пароли не совпадают!</p>
<div style="clear:both;"></div>
<input type=password name="pass2" style="width:100%; height:34px; font-size:14; color:2419c0; background-color:e8e8e8; padding:4px; margin-top:2; margin-bottom:10;" onkeydown=checkEnter()><br>
<input style="width:180; color:ffffff; text-align:center; background-color:f8604a;" type=button value="Подтвердить [Enter]" onclick=checkPassw()>
</div>
</body> |