Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
#1

Полезные BAT/CMD скрипты - CMD/BAT

15.10.2012, 00:56. Просмотров 304708. Ответов 160

В этой теме выкладываем скрипты, которые часто используются Вами
или на Ваш взгляд могут иметь большое практическое значение.

Также приветствуются скрипты высокой степени сложности, полезные с точки зрения

http://www.cyberforum.ru/cmd-bat/thread972400.html


изучения принципа их работы.

Правила темы:
  • При выкладывании скрипта постарайтесь тщательно описывать принцип его работы и по-больше комментировать строки Вашего кода.
  • Код, состоящий из > 4 строк, помещайте под теги [SPOILER="Развернуть код..."]Ваш код[/SPOILER]. Также можно сделать 2 варианта: 1. Чистый код. 2. С комментариями.
  • Запрещаются любые обсуждения выложенных здесь работ;
  • если в этом есть необходимость, создайте отдельную тему в которой опишите замечание или проблему при работе с данным скриптом, указав ссылку на сообщение из этой темы (правый клик по слову "Permalink" вверху каждого сообщения).
  • Если Вы хотите внести исправление в выложенный Вами код - пишите мне в личку ссылку на Ваше старое сообщение и новый исправленный вариант. (полный вариант с тегами Вашего старого сообщения можно получить, нажав на него - кнопка "Цитата").
  • Допускается размещение обзора программ, помогающих редактировать/отлаживать код.


Схожая тема: http://www.cyberforum.ru/cmd-bat/thread12941.html
Смежная тема: http://www.cyberforum.ru/vbscript-wsh/thread671396.html
Ссылка на набор полезных скриптов (предыдущая шапка от bombus) http://www.cyberforum.ru/cmd-bat/thread12941.html


******************* Перечень полезных скриптов: *******************

Архивация и резервное копирование
Создание CAB-архивов ссылка

Безопасность
Удаление последствий вируса (фейковые папки на флешке) ALINK
Стать владельцем папки/файла, получить полные права (пункт контекстного меню (Reg-файл) ALINK
Смена владельца и прав на папку и ее содержимое, в которой запущен батник (Full Access <-> Read Only) ссылка

Дата, время
Конвертация даты/времени из/в UNIX-формат(в секундах после 1-янв-1970 00:00:00) ссылка

Интерфейс
Крутящаяся палка (имитация) ссылка
Вызов GUI диалогового окна выбора папки ссылка
Разноцветный вывод в консоли. ссылка Цветная роза. ссылка
Диалоговое меню выбора файла ссылка

Компиляция
Помощник компиляции исходных кодов С# (.cs) через консольный NET.FrameWork компилятор ссылка

Операционная система
Восстановление шрифтов после сбоя ссылка
Пищалка (сигнал встроенного динамика, подобие Beep) ссылка
Регистрация всех библиотек DLL и OCX ссылка
Проверка целостности системных файлов утилитой sfc /scannow с выводом лога и автоопределением месторасположения диска ссылка

Сеть
Подсчёт маски подсети на основании двух крайних значений диапазона. ALINK
Пакетное получение информации о IP-адресах и построение HTML-отчёта. ALINK
GetIP/GetMAC/Get default gateway ссылка

Процессы
Завершение процесса (с листингом и выбором через меню) ссылка
Многопроцессное создание пустых файлов (бенчмарк для винчестера) ссылка
Отслеживание зависшего процесса и его перезапуск с указанным приоритетом ссылка
Process Change Monitor (мониторинг и протоколирование изменений в списке запущенных процессов) ссылка

Текстовые операции, кодировка
Вывод текста без переноса на новую строку ALINK
Перекодировка CP OEM-866 <-> WIN-1251 - 1) CMD 2) VBA 3) ASM (exe+src) ссылка
Помощь по всем командам вашей версии Windows / DOS ссылка
Транслитерация файлов, в именах которых есть кириллица (файловые операции) ссылка
Преобразование текстового файла в кодировку Unicode (файловые операции) ссылка
Перекодировщик Reversed Hex в символьную строку ссылка

Файловые операции, разделы
Взаимное копирование содержимого 2 папок друг в друга ALINK
Прогресс-бар копирования файлов ссылка
Циклическое копирование файлов по каталогам с ожиданием завершения их дозаписи в исходную папку. ссылка
Создание нуль-копии папки для выкладывания на форуме ссылка
Получение серийного номера всех съемных устройств и физических жестких дисков (не разделов). Получение имен разделов физических накопителей (кроме оптических). ссылка

Другое
Расчёт индекса массы тела и идеального веса ссылка
19
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2012, 00:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Полезные BAT/CMD скрипты (CMD/BAT):

Меню в BAT/CMD
Вопрос от полного ламера. У меня такая проблемма надо сделать меню в CMD чтобы...

несколько заданий на CMD/BAT
очень прошу, помогите с этими задачками :(... 1.Напишите командный...

Специальные символы в CMD/BAT
Добрый вечер. Вопрос по поводу специальных символов в BAT: &lt; , &gt; , &gt;&gt; , /? ,...

Переименовать файл (CMD/BAT)
как удалить из названия файла ненужную информацию 1)пробел 2)фигурную скобку...

Сортировка по времени в bat/cmd
сабж в папке А лежит bat, который в папке Б сортирует все файлы по времени и...

160
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
23.02.2013, 05:03  [ТС] #21
Process Change Monitor
Мониторинг и протоколирование запускаемых/завершаемых процессов в момент работы скрипта.
Автор: Dragokas

Обсуждается здесь: http://www.cyberforum.ru/cmd-bat/thread910484.html

02.11.2016 Вышла версия 2.2 (vbs). Детали здесь.

cmd-версия (v2.1.):


vbs-версия:
0
Миниатюры
Полезные BAT/CMD скрипты  
Вложения
Тип файла: rar TaskC2.1 (устаревшая).rar (1.9 Кб, 79 просмотров)
Тип файла: zip Task_Monitor_v2.2.zip (2.8 Кб, 70 просмотров)
sov44
1758 / 742 / 127
Регистрация: 09.04.2011
Сообщений: 1,313
11.03.2013, 13:35 #22
Транслитерация файлов, в именах которых есть кириллица
Автор: gora (oszone)
Bash
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
@Echo Off
:: Кодировка файла Кириллица DOS (866)
SetLocal EnableDelayedExpansion
:: Путь к обрабатываемой папке
Set Folder=e:\Temp\1
 
:: Список замен
Set preset=а_a б_b в_v г_g д_d е_e ё_yo ж_zh з_z и_i й_i к_k л_l м_m н_n о_o п_p р_r с_s т_t у_u ф_f х_kh ц_c ч_ch ш_sh щ_sh ъ_. ы_y ь_. э_e ю_yu я_ya А_A Б_B В_V Г_G Д_D Е_E Ё_Yo Ж_Zh З_Z И_I Й_I К_K Л_L М_M Н_N О_O П_P Р_R С_S Т_T У_U Ф_F Х_Kh Ц_C Ч_Ch Ш_Sh Щ_Sh Ъ_. Ы_Y Ь_. Э_E Ю_Yu Я_Ya
 
:: После проверки слово ECHO удалить
For /F "tokens=* delims=" %%A In ('Dir /S /B /A:-D "%folder%"') Do (
    Call :_translit "%%~nA"
    Echo Ren "%%A" "!Result!%%~xA"
)
Pause
Exit
 
:_translit
Set Data=%~1
Set Data=%Data: =_%
Set Result=
:_loop
Set Char=%Data:~,1%
For %%I In (%preset%) Do For /F "tokens=1,2 delims=_" %%A In ("%%I") Do If %Char%==%%A Set Char=%%B
Set Result=%Result%%Char%
Set Data=%Data:~1%
If Defined Data GoTo _loop
GoTo :EOF
0
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
14.03.2013, 18:29 #23
Преобразование текстового файла в кодировку Unicode

Bash
1
2
3
4
5
6
7
8
@echo off
:: преобразование текстового файла в unicode
:: вызов: to_uni infile outfile codepage
For /f "tokens=2 delims=:" %%G in ('CHCP') do Set _codepage=%%G
CHCP %3 >NUL
CMD.EXE /D /A /C (SET/P=яю)<NUL > %2 2>NUL
CMD.EXE /D /U /C TYPE %1 >> %2
CHCP %_codepage%
Код
to_uni.cmd входной_файл_в_866_или_1251 выходной_файл_в_юникоде кодовая_страница_входного_файла
Пример:
Код
to_uni.cmd input_file output_file 866
Текст будет чисто в бинарном юникоде, но маркер в самом начале "яю" позволяет корректно открывать его во многих редакторах, поддерживающих юникод.
0
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
22.03.2013, 15:19 #24
Конвертация даты/времени из/в UNIX-формат(в секундах после 1-янв-1970 00:00:00)
Практическое применение: в регистри довольно много значений хранится именно в этом формате. Ну и быстрое сравнение дат файлов с определённной датой при травесе каталога.
Вытаскиваем дату установки виндавса:
Bash
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
@echo off & setlocal ENABLEEXTENSIONS
:: requires REG.EXE Version 2.0 or later
set key="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
set val="InstallDate"
for /f "delims=" %%a in ('reg query %key% /v %val%^|find %val%') do (
  for %%b in (%%a) do set secs=%%b
)
call :SecsToDate %secs% yy mm dd hh nn ss
echo/Windows installation date is: %yy%-%mm%-%dd% %hh%:%nn%:%ss%
goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:SecsToDate %secs% yy mm dd hh nn ss
::
:: By:   Ritchie Lawrence, [url]http://www.commandline.co.uk[/url]
::
:: Func: Возвращает дату и время из кол-ва секунд прошедших от
::       1-янв-1970 00:00:00.(UNIX-формат)
:: 
:: Args: %1 секунды для конвертации (по значению)
::       %2 перем. для года(по ссылке)
::       %3 перем. для месяца, 01-12(по ссылке)
::       %4 перем. для дня месяца, 01-31(по ссылке)
::       %5 перем. для часов, 00-24(по ссылке)
::       %6 перем. для минут, 00-59(по ссылке)
::       %7 перем. для секунд, 00-59(по ссылке)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
set /a i=%1,ss=i%%60,i/=60,nn=i%%60,i/=60,hh=i%%24,dd=i/24,i/=24
set /a a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
(if %hh% LSS 10 set hh=0%hh%)&(if %nn% LSS 10 set nn=0%nn%)
if %ss% LSS 10 set ss=0%ss% 
endlocal&set %7=%ss%&set %6=%nn%&set %5=%hh%&^
set %4=%dd%&set %3=%mm%&set %2=%yy%&goto :EOF
Конвертим текущую дату/время в секунды:
Bash
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
@echo off 
setlocal ENABLEEXTENSIONS
 
call :DateToSecs %date:~-4% %date:~-7,2% %date:~-10,2% %time:~,2% %time:~3,2% %time:~6,2% secs
echo/%secs% seconds have elapsed since 1970-01-01 00:00:00
goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateToSecs %yy% %mm% %dd% %hh% %nn% %ss% secs
::
:: By:   Ritchie Lawrence, [url]http://www.commandline.co.uk[/url]
::
:: Func: возвращает кол-во секунд после 1-янв-1970 00:00:00
::       для данных даты и времени(UNIX-формат)
:: 
:: Args: %1 год, 2 или 4 цифры (по значению)
::       %2 месяц, 1/01 по 12, лидирующий 0 допустим (по значению)
::       %3 день,  1/01 по 31, лидирующий 0 допустим (по значению)
::       %4 часы, 0/00 по 23 (по значению)
::       %5 минуты, 00-59 (по значению)
::       %6 секунды, 0-59 или 00-59 (по значению)
::       %7 переменная для возврата значения (по ссылке)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5&set ss=%6
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
::if {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
::if {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
::if {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,ss=100%ss%%%100
set /a j=j*86400+hh*3600+nn*60+ss
endlocal&set %7=%j%&goto :EOF
1
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
24.03.2013, 19:30 #25
Немного сетки: GetIP/GetMAC/Get default gateway
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off & setlocal ENABLEEXTENSIONS
call :GetIP ip
echo/IP Address is: %ip%
goto :EOF
 
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:GetIP ip
::
:: By:   Ritchie Lawrence, [url]http://www.commandline.co.uk[/url]
::
:: Func: Получает Ip-addr сетевушки. Если сетевушек несколько, возвращает адрес той,
::   к которой прибит default route. В случае ошибки возвращает 0.0.0.0
:: 
:: Args: %1 перем. для получения IP-addr.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS & set "i=0.0.0.0" & set "j="
for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do (
  if not defined j for %%b in (%%a) do set "i=%%b" & set "j=1")
endlocal & set "%1=%i%" & goto :EOF
Bash
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
@echo off & setlocal ENABLEEXTENSIONS
call :GetMAC mac
echo/MAC address is: %mac% or classic form: %mac:-=^:%
goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:GetMAC mac
::
:: By:   Ritchie Lawrence, 2003-09-24, [url]http://www.commandline.co.uk[/url]
::
:: Func: Получает MAC-addr. сетевушки в формате XX-XX-XX-XX-XX-XX.
::   Если сетевушек несколько, возвращает адрес той,
::   к которой прибит default route. В случае ошибки возвращает 00-00-00-00-00-00
:: 
:: Args: %1  перем. для получения MAC-addr.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS & set "m=00-00-00-00-00-00" & set "i=" & set "j="
set "n=0" & set "c=ipconfig/all" & set "f=findstr"
for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do (
  if not defined j for %%b in (%%a) do set "i=%%b" & set "j=1")
set "j="
if not defined i endlocal & set "%1=%m%" & goto :EOF
for /f "delims=:" %%a in ('%c%^|%f%/n IP.*Address.*%i%') do set /a n=%%a-6
for /f "delims=" %%a in ('%c%^|more/e +%n%^|%f% Physical.Address') do (
  if not defined j for %%b in (%%a) do set "m=%%b" & set "j=1")
endlocal & set "%1=%m%" & goto :EOF
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off & setlocal ENABLEEXTENSIONS
call :GetDG dg
echo/Default Gateway is: %dg%
goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:GetDG dg
::
:: By:   Ritchie Lawrence, [url]http://www.commandline.co.uk[/url]
::
:: Func: Получает default gateway. В случае ошибки возвращает 0.0.0.0
:: 
:: Args: %1 перем. для получения default gateway
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS & set "g=0.0.0.0" & set "j="
for /f "tokens=3" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do (
  if not defined j for %%b in (%%a) do set "g=%%b" & set "j=1")
endlocal & set "%1=%g%" & goto :EOF
1
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
24.03.2013, 22:37  [ТС] #26
Расчёт индекса массы тела и идеального веса
Автор: sov44

Bash
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
@echo off
SetLocal enabledelayedexpansion
color 1a
title Расчёт индекса массы тела и идеального веса
mode con: cols=70 lines=26
echo.
echo.
set /p rost="Мой рост в см. :                      "
set /p wes="Мой вес в кг. :                       "
set /p pol="Мой пол [м\ж] :                       "
set /p woz="Мой возраст :                         "
set /p grd="Моя окружность грудной клетки в см. : "
 
echo.
set /a ii=%rost%
set /a ind=%wes%*1000000/(%ii%*%ii%)
set uu=%ind:~0,2%
Echo.
Echo               Мой индекс массы тела %UU%
Echo.
Echo  Индекс массы тела менее 18    - Недостаточная масса тела
Echo  Индекс массы тела от 18 до 30 - Норма
Echo  Индекс массы тела от 30 до 35 - Предожирение
Echo  Индекс массы тела от 35 до 40 - Ожирение 1 степени
Echo  Индекс массы тела от 40 до 45 - Ожирение 2 степени
Echo  Индекс массы тела более 45    - Ожирение 3 степени 
 
if /i "%pol%"=="м" set /a ivh=48+11*(%ii%-150)/10
if /i "%pol%"=="ж" set /a ivh=45+9*(%ii%-150)/10
 
echo.
echo.
echo  Мой идеальный вес по Хаммонду (рост и пол)  :               %ivh% кг.
 
if "%woz%" LEQ 40 (set /a ivb=%ii%-110) else (set /a ivb=%ii%-100)
echo  Мой идеальный вес по Броку (рост и возрост) :               %ivb% кг.
 
set /a ivbh=%ii%*%grd%/240
echo  Мой идеальный вес по Брудхарду (рост и окружность груди) :  %ivbh% кг.
 
set /a ivl=(%ii%-100)-((%ii%-150)/2)
echo  Мой идеальный вес по Лоренцу (рост) :                       %ivl% кг.
 
if /i "%pol%"=="м" set /a ivk=((400*%ii%/254)-128)*453/1000
if /i "%pol%"=="ж" set /a ivk=((350*%ii%/254)-108)*453/1000
 
echo  Мой идеальный вес по Куперу (рост) :                        %ivk% кг.
echo.
 
pause>nul
0
Вложения
Тип файла: zip ind_massy2.zip (838 байт, 208 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
26.03.2013, 23:25  [ТС] #27
Создание нуль-копии папки для выкладывания на форуме
Автор: gora (oszone)

На этом форуме часто приходится наблюдать следующую картину. ТС пытается сформулировать свою задачу и "на пальцах" объяснить в каких папках у него находятся файлы\папки, которые ему требуется обработать соответствующим образом. Оценить структуру папок\файлов, их взаимное расположение, их имена и расширения, а также отсутствие в именах спец. символов, по такому описанию бывает крайне затруднительно. Переписка с ТС и выяснение всех деталей структуры занимает порой большую часть ветки и "напрягает" отвечающих созданием ненужных для ТС вариантов скриптов, основанных на гаданиях\предположениях.
Гораздо удобнее было бы увидеть эту структуру, но папки и файлы в них могут иметь большой размер или содержать конфиденциальную информацию. Для таких случаев удобно пользоваться нуль-копией папки\папок, в которой сохранена вся структура вложенных папок и находящихся в них файлов с сохранением их названий, но все файлы имеют нулевой размер и не содержат ни какой информации.

Предлагаю вариант скрипта для создания такой нуль-копии папки.

После создания нуль-копии ее можно сравнить с оригиналом, на предмет отсутствия ошибок в структуре, заархивировать, и архив прикреплять к сообщению при написании ТЗ.

Развернуть код

Bash
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
@Echo Off
ChCp 1251>Nul
If "%~1"=="" (
    Echo The correct syntax:
    Echo %~nx0 "Full\path\to\Folder 1" ["Full\path\to\Folder 2"] ...
    Pause>Nul
    Exit
)
For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set t=%%i
Set zDT=_Zero_%t:~2,2%%t:~4,2%%t:~6,2%_%t:~8,2%-%t:~10,2%
Set f=%~1& Set cnt=2& Set c=0& Set cf=0
:_loop
    If "%f:~0,1%"=="\" Set /A cnt+=1
    Set f=%f:~1%
If Defined f GoTo _loop
Set /A cntI=cnt-1
 
If "%~2"=="" (
    If Exist "%~1\*" Call :_makeDir "%~1%zDT%"
    Call :_item "%~1" "%~1%zDT%" "%~1" "%cnt%" "%~1%zDT%" "%~dpn1%zDT%%~x1"
    If Exist "%~1\*" For /R "%~1%zDT%" %%f In (.) Do Set /A cf+=1
) Else (
    Call :_makeDir "%~dp1%zDT%"
    For %%i In (%*) Do Call :_item "%%~i" "%~dp1%zDT%\%%~nxi" "%~dp1%%~nxi" "%cntI%" "%~dp1%zDT%" "%~dp1%zDT%\%%~nxi"
    For /R "%~dp1%zDT%" %%f In (.) Do Set /A cf+=1
)
Echo Complete!
Echo Folders=%cf%   Files=%c%
Echo.
Pause
Exit
 
:_item
If Exist "%~1\*" (
    xCopy /T /E /H /K "%~1" "%~2\"|| GoTo :_err
    PushD "%~3"
    For /F "tokens=%~4* delims=\" %%a In ('Dir /S /B /A:-D') Do (
        If "%%~b"=="" (CD.>"%~5\%%~a") Else CD.>"%~5\%%~a\%%~b"
        Set /A c+=1
    )
    PopD
) Else (
    CD.>"%~6"
    Set /A c+=1
)
GoTo :EOF
 
:_err
For /R "%~2" %%f In (.) Do Set erf=%%f
Set erf=%erf:~0,-2%
Call Set erf=%%erf:%~2=%~1%%
RD /S /Q "%~5"
Echo Error xCopy on file:
Echo %erf%
Pause>Nul
Exit
 
:_makeDir
If Exist "%~1" RD /S /Q "%~1"
MD "%~1"
GoTo :EOF
1
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
27.03.2013, 02:01  [ТС] #28
Разноцветный вывод в консоли.
Автор: Dragokas

Ограничения кода:
1) В конце строки всегда печатается символ "двоеточие".
2) Нельзя печатать текст из символов, которые не могут быть использованы в имени файла |\:"<>?/*, а также . (точка) и другие служебные CMD.
3) Строка всегда заканчивается переносом каретки.
4) В сценарии используется символ BackSpace (для функции отступа), который нельзя создать обычным блокнотом ^_^

В строке № 57 Set _BS=здесь поставить символ BackSpace (0x08)
Bash
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
@echo off
SetLocal
mode con: cols=60 lines=10
Color 9A
 
Set Text=Maded by Dragokas
Set Color=1A
::left, right, center
Set Alignment=right
 
Call :ColorText "%text%" "%color%" "%Alignment%"
Call :ColorText "Working with Colors" "1d" "center"
Echo Press any key...
pause>nul
goto :eof
 
:ColorText %1-in.Text %2-in.Color.HEX %3-Alignment
  Call :SetTextPosition "%~1" "%~3"
  md "%temp%\_bin2" 2>nul
  pushd "%temp%\_bin2"
  echo.>"%~1"
  findstr /V /a:%~2 "1" "*"
  popd
  rd /s /q "%temp%\_bin2"
  Exit /B
 
:SetTextPosition %1-in.Text %2-in.Alignment
  if /i "%~2" neq "left" (
    call :GetConsoleWidth _ConWidth
    call :var_count "%~1" _len
    SetLocal EnableDelayedExpansion
    if /i "%~2"=="right" (
      Set /A _ind=!_ConWidth!-!_len!-1
      Call :indent !_ind!
    )
    if /i "%~2"=="center" (
      Set /A _ind=^(!_ConWidth!-!_len!^)/2
      Call :indent !_ind!
    )
    EndLocal
  )
  Exit /B
 
:GetConsoleWidth %1-out.ConsoleWidth
  For /F "skip=4 tokens=2" %%w In ('mode con') Do Set %~1=%%w& Exit /B
 
:var_count %1-in.Text %2.out.Len.of.Text
  set _var=%~1& set _count=0
  :count--
  set _var=%_var:~1%
  set /a _count+=1
  if not defined _var (set %~2=%_count%& exit /b) else (goto :count--)
 
:indent %1-in.Count.of.Spaces
  SetLocal EnableDelayedExpansion
  ::Здесь нужно заменить символ ниже на BackSpace (код 0x08) <<<<<---------
  Set _BS=
  Set _Spaces=
  for /L %%C in (1,1,%~1) do Set "_Spaces=!_Spaces! "
  <nul set /p "_Spaces=_%_BS%%_Spaces%"
  EndLocal& Exit /B


Практическое применение: см. http://www.cyberforum.ru/holidays/thread817605.html#post4357276
P.S. Обсуждение: http://www.cyberforum.ru/cmd-bat/thread830030.html
3
Миниатюры
Полезные BAT/CMD скрипты  
Вложения
Тип файла: rar Colors.rar (869 байт, 389 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
29.03.2013, 01:18  [ТС] #29
Получение серийного номера всех съемных устройств и физических жестких дисков (не разделов).
Получение имен разделов физических накопителей (кроме оптических).
(основано на технологии WMI)
ver.1.2. (от 30.03.2013)
Автор: Dragokas
Совместимость: Windows 7, XP

История изменений:
1.2. Более нет необходимости в запуске скрипта с повышенными правами (для обхода представления серийного номера в виде Reverse Hex числа).
1.1. Добавлена возможность получения серийного номера HDD.

Развернуть код

Bash
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
@echo off&:: by Alex Dragokas
Setlocal EnableDelayedExpansion EnableExtensions
Echo.
::Получаем PNPDeviceID и PhysicalDrive Name устройств, подключенных по интерфейсу USB
echo Перечень cъемных накопителей:
echo.
For /F "Skip=2 Tokens=2-4 delims=," %%i In (
  'WMIC DiskDrive Where InterfaceType^="USB" Get Name^,PNPDeviceID^,Model /Value /format:csv 2^>nul'
) do (
    Set AtLeastOneDevice=true
    Call :Get_USB_SN "%%k" Device_SN
    Call :GetPartition "%%j" Drives
    Echo Model: %%i
    Echo %%j
    Echo Disk^(s^):     !Drives!
    Echo Device S/N:         "!Device_SN!"
    Echo.
)
if not defined AtLeastOneDevice Echo Съемных USB накопителей не обнаружено.
Echo.
Echo Перечень жестких дисков:
Echo.
For /F "Skip=2 Tokens=2-4 delims=," %%i In (
  'WMIC DiskDrive Where "InterfaceType^!^='USB'" Get Name^,PNPDeviceID^,Model /Value /format:csv'
) do (
    Call :GetPartition "%%j" Drives
    Call :Get_HDD_SN "%%j" Device_SN
    Echo Model: %%i
    Echo %%j
    Echo Disk^(s^):     !Drives!
    Echo Device S/N:         "!Device_SN!"
    Echo "!Device_SN!">>%~dp0file.txt
    Echo.
)
pause>nul
Goto :eof
 
::Парсим часть с серийным номером устройства
:Get_USB_SN %1-in.PNPDeviceID %2-out.Device_S/N
  Set "%~2="
  Set "PNP=%~1"
  Set "PNP=%PNP:\=" "%"
  Set "PNP=%PNP:;=" "%"
  Set "PNP=%PNP:&=" "%"
  Set _Prev=
  For %%i in ("%PNP%") do (
    if "!_Prev:~0,4!"=="REV_" (Set "%~2=%%~i"& Exit /B)
    Set "_Prev=%%~i"
  )
  Exit /B
 
:Get_HDD_SN %1.in-PhysicalDrive_Name %2-out.Device_S/N
  Set "tag=%~1"
  Set "tag=%tag:\=\\%"
  For /F "UseBackQ skip=2 tokens=2 delims=," %%i In (
    `wmic path Win32_PhysicalMedia where "tag='%tag%'" Get SerialNumber /format:csv`
  ) do call set "_serial=%%i"
  ::Выше используется Call, чтобы удалить служебный символ 0x0D из переменной
  set "_serial=%_serial: =%"
  ::Проверяем признак 16-ричного кода (ответ длинной 40 символов)
  if "%_serial:~39,1%" neq "" Call :Hex_To_String "%_serial%" "_serial"
  set "%~2=%_serial%"
  Exit /B
 
:Hex_To_String %1-in.Reversed.Hex.Number %2-out.String
  SetLocal& set "x16=%~1"
  set n=45
  for %%A in (- . / 0 1 2 3 4 5 6 7 8 9) do set s.!n!=%%A& set /a n+=1
  set n=65
  for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do set s.!n!=%%A& set /a n+=1
  set n=97
  for %%A in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set s.!n!=%%A& set /a n+=1
  set xs=
  for /L %%C in (0,4,8184) do (
    if "!x16:~%%C,1!"=="" goto _ex_Hex
    set /A cplus=%%C+2
    call set /A x10=0x%%x16:~!cplus!,2%%
    call set xs=!xs!%%s.!x10!%%
    set /A x10=0x!x16:~%%C,2!
    call set xs=!xs!%%s.!x10!%%
  )
  :_ex_Hex
  EndLocal& set "%~2=%xs%"& Exit /B
 
::Конвертация PhysicalDrive Name -> Partition Names -> Drive Names
  :GetPartition %1.in-PhysicalDrive_Name %2-out.Drive_Names
  Set "%~2="
  For /F "skip=2 delims==, tokens=3,6-7" %%i In (
    'WMIC path Win32_DiskDriveToDiskPartition get /format:csv'
  ) do (
    if %%i=="%~1" (
      For /F "skip=2 delims==, tokens=3-4,7" %%I In (
        'WMIC path Win32_LogicalDiskToPartition get Antecedent^,Dependent /format:csv'
      ) do (
        if "%%I,%%J"=="%%j,%%k" Set "%~2=!%~2! %%K"
  )))
  Exit /B
2
Миниатюры
Полезные BAT/CMD скрипты  
Вложения
Тип файла: zip USBDrive_SN4.zip (2.2 Кб, 427 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
30.03.2013, 02:20  [ТС] #30
Перекодировщик Reversed Hex в символьную строку
(подпрограмма)

Bash
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
@echo off
Setlocal EnableExtensions EnableDelayedExpansion
 
set x16=434f2d5a3238585741315758374437454f303856
Call :Hex_To_String "%x16%" str
echo.%str%
 
pause>nul
exit /B
 
 
:Hex_To_String %1-in.Reversed.Hex.Number %2-out.String
  SetLocal& set "x16=%~1"
  set n=45
  for %%A in (- . / 0 1 2 3 4 5 6 7 8 9) do set s.!n!=%%A& set /a n+=1
  set n=65
  for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do set s.!n!=%%A& set /a n+=1
  set n=97
  for %%A in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set s.!n!=%%A& set /a n+=1
  for /L %%C in (0,4,8184) do (
    if "!x16:~%%C,1!"=="" goto _ex_Hex
    set /A cplus=%%C+2
    call set /A x10=0x%%x16:~!cplus!,2%%
    call set xs=!xs!%%s.!x10!%%
    set /A x10=0x!x16:~%%C,2!
    call set xs=!xs!%%s.!x10!%%
  )
  :_ex_Hex
  EndLocal& set "%~2=%xs%"& Exit /B
2
Kиpилл
Особый статус
Эксперт WindowsВирусоборец
8157 / 1648 / 78
Регистрация: 15.04.2011
Сообщений: 5,399
30.03.2013, 09:41 #31
Проверка целостности системных файлов утилитой sfc /scannow с выводом лога и автоопределением месторасположения диска.

Автор: Koza Nozdri
Совместимость: Windows Vista/7/8/8.1, XP, 2003, 2000.

Автоматизированный скрипт проверки sfc/scannow.
Определяет версию ОС и выполняет действия соответствующие версии системы.
Самостоятельно определяет путь к виртуальному приводу с смонтированным образом,проверяет наличие диска и уровня доступа пользователя.
На системах старше Vista выводит лог проверки на рабочий стол.

Инструкция:

1. Скачать архив, запустить bat-файл внутри архива, следовать инструкциям.

2. Лог по окончании будет сохранен в указанную вами папку в виде файла sfcdetalis.txt.

3. Заархивируйте лог в архив формата ZIP и приложите к теме, где Вам оказывают помощь.
6
Вложения
Тип файла: zip Выполнить проверку sfc_scannow.zip (2.9 Кб, 251 просмотров)
Тип файла: 7z Выполнить проверку sfc_scannow 0.5.7z (4.1 Кб, 52 просмотров)
Kиpилл
Особый статус
Эксперт WindowsВирусоборец
8157 / 1648 / 78
Регистрация: 15.04.2011
Сообщений: 5,399
30.03.2013, 09:41 #32
Проверка целостности системных файлов утилитой sfc в среде восстановления
Автор: Koza Nozdri
Версия: 0.1

Предназначен для операционных систем старше Vista.

Скрипт автоматической проверки операционной системы Windows на наличие поврежденных системных файлов с функцией восстановления с помощью утилиты sfc.exe в среде восстановления.
Ранее данная процедура была весьма трудоемкой для неопытного пользователя.
Теперь же самая сложная задача -запустить скрипт,с этим справится кто угодно,даже новичок)

Инструкция


Просто скопируйте скрипт (предварительно распаковав его из архива) в удобное место (например на диске С) ,затем выполните загрузку в среде восстановления.

В окне параметров восстановления выберите: "Командная строка"

Затем введите: Notepad
Нажмите клавишу Enter

Запустится блокнот.
В меню "Тип файлов" выберите "Все файлы" (как на рисунке) затем откройте поочередно диски ,пока не обнаружите файл sfc_pe.bat.

Полезные BAT/CMD скрипты

Нажмите правой кнопкой мыши по файлу и выберите пункт меню "Открыть"

Полезные BAT/CMD скрипты

Запустится скрипт,сообщит список дисков ,на которых обнаружена Windows.

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

Полезные BAT/CMD скрипты

На скрине видна моя учетная запись Fire,так же видно что она на диске С
(Буква диска может быть и иной).

Если буква диска определилась автоматически правильно - нажимаем клавишу Enter.
Если не правильно,то вводим с клавиатуры на английской раскладке букву диска и нажимаем клавишу Enter.

Запустится проверка,дождитесь окончания.
1
Вложения
Тип файла: zip sfc pe.zip (1,014 байт, 135 просмотров)
Тип файла: 7z sfc pe 0.2.7z (1,016 байт, 40 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
04.04.2013, 00:17  [ТС] #33
Цветная роза с использованием только встроенных команд консоли
Уточню, что Microsoft не предусмотрела изначально, чтобы в консоли можно использовать одновременно более 1 цвета шрифта/фона без сторонних средств на DOS-е.
Пришлось прибегнуть к одному трюку, ранее нигде не опубликованному.

Часть обсуждения по данному скрипту находится здесь: http://www.cyberforum.ru/cmd-bat/thread830030.html
Bash
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
@echo off&:: Want something special :)
::                                                          $ by Alex Dragokas $
SetLocal EnableDelayedExpansion EnableExtensions
if "%~1"=="" Call :SetBuffer Set
Color 9A
md "%temp%\_bin2" 2>nul 
pushd "%temp%\_bin2"
 
for /f "delims=[]" %%N in ('find /n "My_Beautiful_Rose" ^<"%~f0"') do set /a num=%%N
for /F "delims=" %%A in ('more +%num% ^<"%~f0"') do (
  Set /a n+=1
  if !n! LEQ 20 Call :ColorText "%%A" "1C"
  if !n! GTR 20 if !n! LEQ 27 Call :ColorText "%%A" "1D"
  if !n! GTR 27 if !n! LEQ 32 Call :ColorText "%%A" "1A"
  if !n! GTR 32 if !n! LEQ 45 Call :ColorText "%%A" "1A"
  if !n! GTR 45 if !n! LEQ 49 Call :ColorText "%%A" "1E"
  if !n! GTR 49 Call :ColorText "%%A" "08"
)
 
popd
Call :SetBuffer Recover
rd /s /q "%temp%\_bin2"
del Reg_Console_backup.reg>nul
pause>nul
goto :eof
 
:ColorText %1-in.Text %2-in.Color.HEX
  echo.>"%~1"
  findstr /V /a:%~2 "1" "*" 2>nul
  del /f "%~1"
Exit /B
 
::Setting screen buffer width = current width +2 to hide ":" in the Findstr command.
::However, the settings are static now. Needs few more code to recode x10 to x16 scales.
:SetBuffer %1-in.Operation.Set.or.Recover
if "%~1"=="Recover" (2>nul 1>&2 reg import Reg_Console_backup.reg& exit /B)
::making backup
reg export "HKCU\Console" Reg_Console_backup.reg
::making permanent backup
echo n| copy /-Y Reg_Console_backup.reg Reg_Console_backup_permanent.reg
::Creating modifications to registry
(
echo Windows Registry Editor Version 5.00
echo [HKEY_CURRENT_USER\Console\%%SystemRoot%%_system32_cmd.exe]
echo "ScreenBufferSize"=dword:3e80051
echo "WindowSize"=dword:0038004e
) > Reg_Console_Mod.reg
::Apply it
reg import Reg_Console_Mod.reg
del Reg_Console_Mod.reg
::Restarting CMD on the another thread using new environment
start cmd /c "%~f0" next
Exit
 
:My_Beautiful_Rose
                                  _
                    'M,        .mM'
                     IMIm_  _,mIM'
                     ,MI''IM,mIMm
          'IMmm,    ,IM____IM_'IM,           ,m'
             'IMMIMMIMm_,IM'___'IM''==mm_,mIM'
            ,mIM'____'MIM'______IM,__,mIMIM'
 ,mMIMIMIIMIMM,______,mM'______,IMIMIMIMMM'
IMM,_______'IMM,____,M'______,IIM'_____'MM,
 'IMM,________'IM,_,M'_____,IM'_________'IM,
    'IMm_______'IMMM______,IM'___________'IM,
      'Mm________'IM______MM'______________'IM,
       IM,________IM______MM_________________'IM,
        MM,_______IM,_____'IM_________________'IM
        'IM,______'IM,_____'IM,________________IM; .
         'IM,______'IM,______'IM________.,mmmIMMMMMMMm,_
           IM,______'IM,______IM,__.mIMIMM''''._.._'IMMMM
           'IM,______'IM______mIMIMM''._._._._._.,mM'   'M
            IMm,_____;IM___,IIMM'_._._._._._..,mMM'
            'IMMIMIMMIMM,,IMM'_._._._._.,mMMMMM'
             ,IM'._._.'IMIM'._._._.,mMMMMMMMM'
           ,IM_._._._.,IMM'._._._,mMMMMMMMMM'
          IM._._._.,mIIMM,._._..mMMMMMMMMMM'
         ,M'..,mIMMIMMIMMIMmmmMMMMMMMMMМММ'
         IM.,IMI'''        ''IIMMMMMMMMMMM
        ;IMIM'                  ''IMMMMMMM
        ''                         'IMMMMM
                                     'IMMM                                    ,
                                      'IMM,                                   ,
                                       'IMM                                   ,
                                        'MM,                                  ,
                                         IMM,                                 ,
                                         'IMM           .mIMMIMMIMMIMMIMM,    ,
                   .,mIMMIMMIMM,_,mIMM,   IMM'        ,mIM'._._._._'IM,..M,   ,
                 ,IMMM'_._._._'IMM._'M,   IMM       ,IM'._._._.__-_-;IM__M,   ,
               .mIM'_._._.__(_.-'IM._MM   'MM,    ,M'._._.--_+_.;mIMIMIM,_M,  ,
              ,IM'._._.__(_._.-;,IMIMIMMM__IMM   ,M'._.__(_.-mIM''   'IM,-M   ,
             ,IM'._._._(_._.-;,mIM'  `'IMM_IMM   IM._.__(_.mM'         'IMI   ,
            ,IM_._.__(_._.-;,mIM'      'IMMMMM   MM,.__(_,mM            'M'   ,
            IM'._.__(_._.;,mIM'          'IIMMM_,IMIM,.,IM'                   ,
            IM_._._(_._.,mIM'              IMMMMMMM'_'''                      ,
            `IM,.__(_;,mIM'                 IIMMM                             ,
             'IMI,_(),mIM'                   IMMM                             ,
               'IMMMM'                    '''IMM                              ,
                 ''                        __IMM                              ,
                                          __IMM                               ,
                                           IMM'''                             ,
                                            IMM                               ,
                                            IMM                               ,
                                            IMM                               ,
                                          '''IMM                              ,
                                            IMM                               ,
                                            IMM                               ,
                                            IMM__                             ,
                                           IMM''                              ,
2
Миниатюры
Полезные BAT/CMD скрипты  
Вложения
Тип файла: zip My_Rose.zip (1.6 Кб, 312 просмотров)
Eva Rosalene
Male-to-Female
4049 / 1586 / 301
Регистрация: 06.01.2013
Сообщений: 4,176
Завершенные тесты: 2
04.04.2013, 19:15 #34
Диалоговое меню выбора файла

Итак, код:
Bash
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
@echo off
setlocal enabledelayedexpansion
chcp 1251>nul
if not "%~1"=="" (set dir_n=%~dp1) else (set dir_n=%~dp0)
call :choosefile "!dir_n!"
:x1
cls
::echo.CURF=!curf!
::echo.CFILE=!cfile!
::echo.CTYPE=!ctype!
::echo.callstr = !curf!!cfile!\
::echo !curf!.
::call :extend !curf!.
::echo !_fn!
if "!ctype!"=="file" (set choosen=!cfile!)
if "!ctype!"=="folder" (call :choosefile "!curf!!cfile!\"&goto :x1)
if "!ctype!"=="up" (call :extend !curf!.&call :choosefile !_fn!&goto :x1)
if "!ctype!"=="upd" (call :choosefile "!curf!"&goto :x1)
if "!ctype!"=="quit" (exit /b)
set f1=!curf!!cfile!
endlocal&set _filepath=%f1%
exit /b
 
:choosefile
set counter=0
:cl
set /a counter=!counter!+1
call :ars object.name.!counter! _tm
set object.name.!counter!=
set object.param.!counter!=
if "!_tm!"=="" (goto :ecl) else (goto :cl)
:ecl
set object.name.1=..
set object.param.1=UP
set counter=1
for /f "usebackq tokens=*" %%A IN (`dir "%~1" /A:D /B`) DO (
   set /a counter=!counter!+1
   set object.name.!counter!=%%A
   set object.param.!counter!=FOLDER
)
for %%A IN ("%~1*") DO (
 set /a counter=!counter!+1
 set object.name.!counter!=%%~nxA
 set object.param.!counter!=FILE
)
set page=0
:ch1
cls
for /L %%A IN (1,1,10) DO (
 set /a num=!page!*10+%%A
 call :ars object.name.!num! _name
 call :ars object.param.!num! _type
 set vnum=%%A
 if "!vnum!"=="10" (set vnum=0)
 if "!_type!"=="UP" (echo !vnum!^| ^<!_name!^>)
 if "!_type!"=="FOLDER" (echo !vnum!^| [!_name!])
 if "!_type!"=="FILE" (echo !vnum!^| ^(!_name!^))
 if "!_type!"=="" (echo.)
)
echo.&echo.Текущая директория: "%~1"
if not !page!==0 (<nul set /p xd=[P] Предыдущая страница^|) else (<nul set /p xd=[ ] Предыдущая страница^|)
if !num! LSS !counter! (<nul set /p xd=[N] Следующая страница) else (<nul set /p xd=[ ] Следующая страница)
echo.
echo.[U] Обновить и выйти на первую
echo.[Q] Выход
:ch2
choice /C 1234567890PNUQ /N 
set chos=!errorlevel!
if !chos! LSS 11 (
 set /a uin=!page!*10+!chos!
 call :ars object.name.!uin! name_c
 call :ars object.param.!uin! type_c
 if "!name_c!"=="" (goto :ch1)
 if "!type_c!"=="FILE" (set cfile=!name_c!&set ctype=file&set curf=%~1&exit /b)
 if "!type_c!"=="FOLDER" (set cfile=!name_c!&set ctype=folder&set curf=%~1&exit /b)
 if "!type_c!"=="UP" (set cfile=UP&set ctype=up&set curf=%~1&exit /b)
)
if !chos!==11 (
 if not !page!==0 (set /a page=!page!-1&goto :ch1) else (goto :ch1)
)
if !chos!==12 (
 if !num! LSS !counter! (set /a page=!page!+1&goto :ch1) else (goto :ch1)
)
if !chos!==13 (set ctype=upd&set curf=%~1&exit /b)
if !chos!==14 (set ctype=quit&exit /b)
goto :ch1
exit /b
 
:ars
set %~2=!%~1!
exit /b
 
:extend
set _fn=%~dp1
exit /b
Для работы необходима программа choice. В Win7 есть изначально, про остальные - не знаю.
Пример использования (файл с кодом выше сохранён как dfile.bat и положен рядом с этим батником V):
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
call dfile.bat "%~1"
echo %_filepath%
for %%A IN ("%_filepath%") DO (
 echo NAME            %%~nA
 echo EXTENSION       %%~xA
 echo TIME^&DATE       %%~tA
 echo PATH            %%~dpA
 echo FULLPATH        %%~dpnxA
 echo FULLNAME        %%~nxA
 echo Selected by     DFile
 echo Script author   FraidZZ                
)
pause>nul
2
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
16.05.2013, 02:55  [ТС] #35
Генеральный чистильщик временных файлов от sov44

Кликните здесь для просмотра всего текста
Bash
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
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
@Echo Off
 
:: Максимальное значение обрабатываемого числа для арифметики в CMD = 2^30 - 1 (2147483647 = 2048 Mb. )
 
:: В версии 3:
:: добавлена возможность считать файлы более 2 Гб.
:: выполняется проверка на отсев дисков не имеющих ФС (не ругается на вставленные флешки)
 
:: в версии 4:
:: добавлена функция очистки DNS (исключает проблемы с сетевым подключением)
:: добавлена функция очистки не запускаемых приложений в окне msconfig с огранчением по дате - до 10 дней включительно.
:: исправлена ошибка удаления временных файлов Opera "%DirProg%" на "!DirProg!"
:: Добавлен браузер Google Chrome
:: Добавлено удаление остатков браузеров,ранее установленных и в дальнейшем удалённых из системы - RD /S/Q
:: Проверка наличия браузеров сделана по исполняемому файлу *.exe
:: Добавлена возможность исключить из расчёта размера директории Temp некоторые файлы и папку.
:: Добавлено удаление и расчет размера истории открытых файлов.
:: Добавлено вывод сообщения в случае запуска скрипта при открытии Word.
:: Для УО добавлена очистка рабочего стола от временных файлов Консультанта ПЛЮС.(без расчёта размера)
 
:: в версии 5:
:: Добавлен расчёт и удаление файлов истории, имеющх в начале имени спецсимвол "!"
:: Исключено из расчёта размера директории временных файлов Internet Explorer файла index.dat. 
:: Добавлен расчёт и очистка истории Java, Flash Player
:: Добавлена строчка "Очистка истории открываемых файлов"
 
:: в версии 6:
:: добавлена поддержка очистки корзин в Windows 7
 
:: в версии 7:
:: добавлена очистка файлов *.log, *.old, *.bak, *.temp, *.tmp, *.---, *._mp, *.syd
:: добавлена очистка скаченных файлов из "%windir%\SoftwareDistribution\Download\*"
:: Добавлена очистка истории в Google :Visited Links,Archived History
:: Изменен подсчёт корзин. Теперь считает и из-под пользователя.
:: поддержка Windows XP Home
:: поддержка антивирусной программы ESET Smart Security
:: Мелкие исправления
 
  SetLocal enabledelayedexpansion
color 1a
title sov44
mode con: cols=58 lines=22
  echo.
  echo   -----------------------------------------------------
  echo               УДАЛЕНИЕ ВРЕМЕННЫХ ФАЙЛОВ        
  echo   -----------------------------------------------------
  echo.
  echo.
Set Cnt=0
 
rem 1. Удаление временных файлов Windows
 
:: поиск и удаление временных файлов по расширению на диске С
set iSumL=0
::set Rash=*.log;*.old;*.bak;*.temp;*.tmp;*.---;*._mp;*.syd;
set Rash=*.log;*.temp;*.tmp;
 
  For /F "Delims=" %%I In ('Dir c:\%Rash% /B/S/A:-D-H 2^>nul') Do (
      2>&1 del /q "%%I" | 1>nul findstr "."
      if errorlevel 1 (set /a iSumL +=%%~zI)
)
Set /A Cnt +=!iSumL!
 
:: очистка директории Temp
Set DirProg=%WinDir%\TEMP
 
:: Исключаем из расчёта временные папки и файлы, которые создают работающие приложения
 
:: Для проверки установленной витруальной машины VM Ware
if exist "%WinDir%\TEMP\Perflib_Perfdata_*.dat" set "File1=Perflib_Perfdata_78c.dat"
if exist "%WinDir%\TEMP\vmware-SYSTEM" set "Dir1=vmware-SYSTEM"
 
:: Для KAV 2011
if exist "%ProgramFiles%\Kaspersky Lab" (set "File1=kls????.tmp"& set "File2=Perflib_Perfdata_???.dat")
 
:: для NOD 5 Smart Security
if exist "%ProgramFiles%\ESET\ESET Smart Security\egui.exe" (set "File1=fb_????.evn"& set "File2=Perflib_Perfdata_??*.dat"& set "File3=fb_????.lck")
 
Call :_DirSize "%DirProg%"
Set /A AllSize +=dirsize
Call :_DirSize "%DirProg%\%Dir1%"
Set /A AllSize -=dirsize
For %%i In ("%DirProg%\%File1%" "%DirProg%\%File2%" "%DirProg%\%File3%") Do If Exist %%i Set /A AllSize -= %%~zi
if "%AllSize:~0,1%"=="-" set AllSize=0
 
Set /A Cnt +=%AllSize%
 
  PUSHD "%DirProg%"
  2>Nul RD /S/Q "%DirProg%"
  POPD
echo    Очистка временных файлов Windows              - OK
goto :cl_2
 
:_DirSize
Set dirsize=0
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%~1" /-C /S /A:-D /A:-H  2^>nul') Do (
    If !flag!==1 Set dirsize=%%c
    If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
)
GoTo :EOF
rem ------------------------------------------------------------------------
 
:cl_2
rem 2. Очистка истории Windows
 
::Очистка истории реестра  **НЕ ПРОВЕРЕНА БЕЗОПАСНОСТЬ!!!**
:: меню "ПУСК
::Reg Delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU" /f 1>Nul 2>&1
::Reg Delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU" /f 1>Nul 2>&1
::Reg Delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs" /f 1>Nul 2>&1
::кэш уведомлений панели задач
::Reg Delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotifi" /f 1>Nul 2>&1
 
 
:: Пути и расширения удаляемых файлов
if exist "%WinDir%\system32\systeminfo.exe" (
  >"%temp%\MsgBox.vbs" echo WScript.Quit^(MsgBox^(WScript.Arguments^(1^) ^& vbCrLf ^& WScript.Arguments^(2^) ^& vbCrLf ^& vbCrLf ^& WScript.Arguments^(3^), vbYesNo+vbDefaultButton1,WScript.Arguments^(0^)^)^)
    tasklist 2>nul|find /i "winword.exe" 1>nul && (WScript "%temp%\MsgBox.vbs" "Внимание^!" " Для успешной работы скрипта закройте открытые документы Word" "     После нажатия на кнопку они будут закрыты принудительно" "                                             Продолжить?"^
    & taskkill /F /IM winword.exe 1>nul 2>nul &>nul ping 127.0.0.1 -n 1 &goto :cl_2)
    del /q "%temp%\MsgBox.vbs" 2>nul
)
set iSumT=0
set "dr=%USERPROFILE%\Recent"& call :Calc "%dr%" *.lnk
set "dr=%USERPROFILE%\Application Data\Microsoft\Office\Последние файлы"& call :Calc "%dr%" *.lnk
set "dr=%USERPROFILE%\Local Settings\Temporary Internet Files\Content.MSO"& call :Calc "%dr%" *.*
set "dr=%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word"& call :Calc "%dr%" *.*
 
Set /A Cnt +=%iSumT%
 
del /q "%USERPROFILE%\Рабочий стол\CONS_LOG.TXT" 1>Nul 2>&1
RD /S/Q "%USERPROFILE%\Рабочий стол\CONS.CFG" 1>Nul 2>&1
 
Set "DirProgJ=%USERPROFILE%\Application Data\Sun\Java\Deployment\cache\6.0"& call :Calc1 "%DirProgJ%"
Set "DirProgJ=%USERPROFILE%\Application Data\Macromedia\Flash Player"& call :Calc1 "%DirProgJ%"
set "DirProgJ=%windir%\SoftwareDistribution\Download"& call :Calc1 "%DirProgJ%"
 
echo    Очистка истории открываемых файлов            - OK
goto :cl_3
 
:Calc
for /f "delims=" %%i in ('dir /b/a-d "%dr%\%2" 2^>nul') do (
         set /a iSumT +=%%~zi 1>Nul 2>&1
setlocal disabledelayedexpansion
         del /f/q "%dr%\%%i" 1>Nul 2>&1
endlocal
)
GoTo :EOF
 
:Calc1
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProgJ%" /-C /S 2^>nul') Do (
    If !flag!==1 Set dirsizeJ=%%c
    If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
      )
Set /A Cnt +=dirsizeJ
PUSHD "%DirProgJ%" 2>nul
2>Nul RD /S/Q "%DirProgJ%"
POPD
GoTo :EOF
 
rem -------------------------------------------------------------------------
pause
:cl_3
rem 3. Очистка временных файлов Opera
 
if exist "%programfiles%\Opera\opera.exe" (
Set DirProg=%USERPROFILE%\Local Settings\Application Data\Opera\opera\cache
 
For /F "skip=4 tokens=1-3" %%a IN ("'Dir "!DirProg!" /-C /S ' 2^>nul") Do (
    If !flag!==1 Set dirsize1=%%c
    If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
      )
Set /A Cnt +=dirsize1
PUSHD "!DirProg!" 2>nul
2>Nul RD /S/Q "!DirProg!"
POPD
echo    Очистка временных файлов Opera                - OK
 ) Else ( 
RD /S/Q "%USERPROFILE%\Local Settings\Application Data\Opera" 1>Nul 2>&1
RD /S/Q "%USERPROFILE%\Application Data\Opera" 1>Nul 2>&1
RD /S/Q "%ProgramFiles%\Opera" 1>Nul 2>&1
echo    Очистка временных файлов Opera                - --  )
 
rem ------------------------------------------------------------------------
 
::cl_4
rem 4. Очистка истории в Опере
 
if not exist "%programfiles%\Opera\opera.exe" echo    Очистка истории в Opera                       - -- ^ & goto :cl_5
 set /a iSumO =0
call :CalcAndDel "%AppData%\Opera\Opera\typed_history.xml"
call :CalcAndDel "%AppData%\Opera\Opera\global_history.dat"
call :CalcAndDel "%AppData%\Opera\Opera\search_field_history.dat"
call :CalcAndDel "%AppData%\Opera\Opera\download.dat"
Set /A Cnt +=%iSumO%
echo    Очистка истории в Opera                       - OK
goto :cl_5
 
:CalcAndDel
    set sFile=%~1
        if defined sFile (
        if exist "%sFile%" (
            set /a iSumO += %~z1
            del /f /q "%sFile%"
        )
    )   
GoTo :EOF
 
rem ------------------------------------------------------------------------
 
:cl_5
:::: rem 5. Очистка временных файлов Internet Explorer
:::: rem Исключаем из расчёта файл index.dat
:: 
::set "File1=index.dat"
::Set DirProg=%USERPROFILE%\Local Settings\Temporary Internet Files\Content.IE5
::
::Call :_DirSizeE "%DirProg%"
::Set /A AllSize +=dirsize2
::For %%i In ("%DirProg%\%File1%" ) Do If Exist %%i Set /A AllSize -= %%~zi
::Set /A Cnt +=%AllSize%
::
::PUSHD "%DirProg%"
::2>Nul RD /S/Q "%DirProg%"
::POPD
::echo    Очистка временных файлов Internet Explorer    - OK
::
::rem ------------------------------------------------------------------------
::
::rem 5. Очистка истории в Internet Explorer
::RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1  :: Очистить Журнал 
::RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2  :: Очистить файлы "cookie" 
::RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16 :: Очистить данные веб-форм 
:::: RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32  :: Очистить пароли
::
::echo    очистка истории в Internet Explorer           - OK
::
::goto :cl_6
::
:::_DirSizeE
::Set dirsize2=0
::For /F "skip=4 tokens=1-3" %%a IN ('Dir "%~1" /-C /S /A:-D 2^>nul') Do (
::  If !flag!==1 Set dirsize2=%%c
::  If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
::)
::exit /b
 
rem ------------------------------------------------------------------------
 
:cl_6
rem 6. Очистка временных файлов Mozilla Firefox
 
if exist "%programfiles%\Mozilla Firefox\firefox.exe" (
 
for /f "usebackq tokens=2 delims==" %%i in (`type "%APPDATA%\Mozilla\Firefox\profiles.ini"^|find.exe "Path="`) do ^
set MF_temp=%USERPROFILE%\Local Settings\Application Data\Mozilla\Firefox\%%i\Cache
 
For /F "skip=4 tokens=1-3" %%a IN ('Dir "!MF_temp!" /-C /S ') Do (
    If !flag!==1 Set dirsize3=%%c
    If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
    )
Set /A Cnt +=dirsize3
PUSHD "!MF_temp!"
2>Nul RD /S/Q "!MF_temp!"
POPD
echo    Очистка временных файлов Mozilla Firefox      - OK
       ) Else (
RD /S/Q "%USERPROFILE%\Local Settings\Application Data\Mozilla" 1>Nul 2>&1
RD /S/Q "%USERPROFILE%\Application Data\Mozilla" 1>Nul 2>&1
RD /S/Q "%ProgramFiles%\Mozilla Firefox" 1>Nul 2>&1
 
echo    Очистка временных файлов Mozilla Firefox      - --  )
 
rem ------------------------------------------------------------------------
 
:cl_7
rem 7. Очистка истории в Mazilla Firefox
 
if not exist "%programfiles%\Mozilla Firefox\firefox.exe" echo    Очистка истории в Mazilla Firefox             - -- ^ & goto cl_8 
 
for /f "usebackq tokens=2 delims==" %%i in (`type "%APPDATA%\Mozilla\Firefox\profiles.ini"^|find.exe "Path="`) do ^
set MF_his=%AppData%\Mozilla\Firefox\%%i
set /a iSum = 0
::call :CalcAndDel "%MF_his%\places.sqlite"
call :CalcAndDel "%MF_his%\webappsstore.sqlite"
call :CalcAndDel "%MF_his%\formhistory.sqlite"
 
Set /A Cnt +=%iSumM%
echo    Очистка истории в Mazilla Firefox             - OK
goto :cl_8
 
:CalcAndDel
    set sFile=%~1
    
    if defined sFile (
        if exist "%sFile%" (
            set /a iSumM += %~z1
            del /f /q "%sFile%"
        )
    )   
GoTo :EOF
 
rem ------------------------------------------------------------------------
 
:cl_8
rem 8. Очистка временных файлов Google Chrome
 
if exist "%USERPROFILE%\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" (
Set DirProgCr1=%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default\Cache
 
For /F "skip=4 tokens=1-3" %%a IN ('Dir "!DirProgCr1!" /-C /S ') Do (
    If !flag!==1 Set dirsize4=%%c
    If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
      )
Set /A Cnt +=dirsize4
PUSHD "!DirProgCr1!"
2>Nul RD /S/Q "!DirProgCr1!"
POPD
echo    Очистка временных файлов Google Chrome        - OK
 ) Else (
 RD /S/Q "%USERPROFILE%\Local Settings\Application Data\Google" 1>Nul 2>&1
 RD /S/Q "%USERPROFILE%\Мои документы\Downloads" 1>Nul 2>&1
 echo    Очистка временных файлов Google Chrome        - --  )
 
rem ------------------------------------------------------------------------
 
:cl_9
rem 9. Очистка истории в Google Chrome
if not exist "%USERPROFILE%\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" echo    Очистка истории в Google Chrome               - -- ^ & goto :cl_10
 set /a iSumG =0
call :CalcAndDel_2 "%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default\Current Session"
call :CalcAndDel_2 "%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default\History"
call :CalcAndDel_2 "%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default\History Index *-*"
call :CalcAndDel_2 "%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default\Last Session"
call :CalcAndDel_2 "%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default\Visited Links"
call :CalcAndDel_2 "%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default\Archived History"
 
Set /A Cnt +=%iSumG%
echo    Очистка истории в Google Chrome               - OK
goto :cl_10
 
:CalcAndDel_2
    set sFile=%~1
    
    if defined sFile (
        if exist "%sFile%" (
            set /a iSumG += %~z1
            del /f /q "%sFile%"
        )
    )   
    GoTo :EOF
 
rem ------------------------------------------------------------------------
 
:cl_10
rem 10. Очистка кэш распознавателя DNS (исключает проблемы с сетевым подключением)
rem Удаление не запускаемых приложений в окне msconfig с проверкой их наличия
rem блок скрипта настроен на работу до 10 числа каждого месяца
 
ipconfig /flushdns 1>Nul 2>&1
 
set "tmr=%date:~0,2%"
If %tmr% LEQ 10 (
call :fn1 "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg"
call :fn1 "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupfolder" 
goto :cl_11
 
:fn1
for /f "skip=4 delims=" %%a in ('reg query %1 2^>nul' ) do reg delete "%%a" /f 1>Nul 2>&1
GoTo :EOF
)
rem -------------------------------------------------------------------------------
 
:cl_11
rem 11. Очистка корзины на всех дисках,подсчёт размера удаляемых файлов.
set dirsize5 =0
if exist "C:\RECYCLER" (Set "DirProg=RECYCLER") else (Set "DirProg=^$Recycle.Bin")
 
FOR %%f IN (Z Y X W U V T S R Q P O N M L K J I H G F E D C) DO (
Set "flag=0"
For /F "Skip=4 Tokens=1-3" %%a In ('DIR/-C/S/A:-D "%%f:\%DirProg%" 2^>Nul') Do (
      If !flag!==1 Set /a dirsize5 +=%%c
      If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
))
Call:SUM !Cnt! !dirsize5! Cnt
 
Set rst=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches
REG Add "%rst%\Recycle Bin" /v StateFlags0001 /t REG_DWORD /d 2 /f 1>nul 2>nul
REG Delete "%rst%\Compress old files" /f 2>nul
Cleanmgr /sagerun:1
echo    Очистка корзины на всех дисках                - OK
rem ------------------------------------------------------------------------
 
Call:UDIV2 %Cnt% dirsizeMB  20
Call:UMUL2 %dirsizeMB% CntT 20
Call:SUM %Cnt% -%CntT% ost
 
Set/a $.mb=(%ost%*100)/(1024*1024)
Set "$.mb=0%$.mb%"& Set "$.mb=!$.mb:~-2!"
 
echo/
echo/
echo        Очистка выполнена, всего удалено %dirsizeMB%,%$.mb% Мб
 
ping 127.0.0.1 -n 8 >nul
 
exit
 
:SUM  %uint%  %uint%  %VarRes%
::----------------------------
SETLOCAL EnableDelayedExpansion
(set "$a=%~1"& set "$b=%~2"
 if "!$a:~,1!"=="-" (set "$az=-"&set "$a=!$a:-=!") else set "$az="
 if "!$b:~,1!"=="-" (set "$bz=-"&set "$b=!$b:-=!") else set "$bz="
 for /f "tokens=* delims=0" %%i in ("!$a:~-9!") do set/a "$al=%%i+0"&set/a "$ah=!$a:~,-9!+0"
 for /f "tokens=* delims=0" %%i in ("!$b:~-9!") do set/a "$bl=%%i+0"&set/a "$bh=!$b:~,-9!+0"
 
 set/a "$sl=(!$az!!$al!)+(!$bz!!$bl!)"&set/a $p=!$sl:~,-9!+0&set/a "$sl=!$sl!-(!$p!000000000)"
 set/a "$sh=(!$az!!$ah!)+(!$bz!!$bh!)+(!$p!+0)"
 if !$sh! gtr 0 if !$sl! lss 0 set/a $sh-=1& set/a "$sl=(1000000000+!$sl!)"
 if !$sh! lss 0 if !$sl! gtr 0 set/a $sh+=1& set/a "$sl=(!$sl!-1000000000)"
 for /f "delims=0123456789" %%i in ("!$sh!!$sl!") do set "$z=%%i"
 if !$sh! equ 0 if !$sl! equ 0 set "$z=0"
 set "$sl=00000000!$sl:-=!"
)
 for /f "tokens=* delims=0" %%i in ("!$sh:-=!!$sl:~-9!") do ENDLOCAL& set "%~3=%$z%%%i"
GoTo:EOF
 
:UDIV2  %uint% %VarRes% %uint%
::----------------------------
 SETLOCAL EnableDelayedExpansion
(set "$a=%~1"& set/a "$c=%~3+0"& if !$c! equ 0 set "$c=1"
 for /f "tokens=* delims=0" %%i in ("!$a:~-9!") do set/a "$al=%%i+0,$ah=!$a:~,-9!+0"
 for /l %%i in (1,1,!$c!) do (
   set/a "$p=$ah&1,$ah>>=1,$al>>=1"
   if !$p!==1 set/a $al=$al+500000000)
 set "$z="& if !$ah! equ 0 if !$al! equ 0 set "$z=0"
)
 for /f "tokens=* delims=0" %%i in ("!$ah!!$al!") do ENDLOCAL& set "%~2=%$z%%%i"
GoTo:EOF
 
:UMUL2  %uint% %VarRes% %uint%
::----------------------------
(SETLOCAL EnableDelayedExpansion
 set %~2=%~1& set/a "$c=%~3+0"& if !$c! equ 0 set "$c=1"
 for /l %%i in (1,1,!$c!) do Call:SUM !%~2! !%~2! %~2
 for /f %%i in ("!%~2!") do ENDLOCAL& set "%~2=%%i"
)
GoTo:EOF
 
rem Скрипт создан благодаря помощи Iska, gora, amel27  _http://forum.oszone.net/forum-102.html
1
Вложения
Тип файла: rar all_del_new7-1.rar (5.1 Кб, 805 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
16.05.2013, 22:38  [ТС] #36
Скрипты, присланные мне sov44.

Генератор пароля
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Echo Off
Set PassLenght=12
 
If Not "%1"=="" Set PassLenght=%1
SetLocal EnableDelayedExpansion EnableExtensions
Set TotalChars=65
Set CharSet=0123456789$#_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWQYZ
:Loop
Set /A Rnd=%TotalChars%*%Random%/32768
Set Pswd=!CharSet:~%Rnd%,1!%Pswd%
Set /A PassLenght-=1
If %PassLenght% GTR 0 GoTo Loop
Echo %Pswd%
Pause>Nul



Генератор сложного пароля

Кликните здесь для просмотра всего текста
Bash
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
@ECHO OFF
COLOR 0A
 
:: получаем длину пароля в цифрах
set length_pass=35
 
:: тип используемых символов в пароле
::  использование группы - yes/no
set use_symbol_en_small=yes
set use_symbol_en_big=yes
set use_symbol_ru_small=no
set use_symbol_ru_big=no
set use_symbol_numbers=yes
set use_symbol_special=no
 
:: -----------------== начало скрипта ==-----------------------
 
:: обнуляем переменные
set number_symbol_in_use=0
 
:: задаём наборы символов групп
set group_en_small=a d c d e f g h i j k l m n o p q r s t u v w x y z
set group_en_big=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
set group_ru_small=а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
set group_ru_big=А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
set group_numbers=0 1 2 3 4 5 6 7 8 9
set group_special=~ ` @ # $ № : { } / \ + - _ . '
 
:: узнаём кол-во символов которые будут использоваться и составляем строку выбора
if %use_symbol_en_small%==yes (
    set /a number_symbol_in_use=%number_symbol_in_use%+26
    set symbol_in_use=%group_en_small%
)
if %use_symbol_en_big%==yes (
    set /a number_symbol_in_use=%number_symbol_in_use%+26
    set symbol_in_use=%symbol_in_use% %group_en_big%
)
if %use_symbol_ru_small%==yes (
    set /a number_symbol_in_use=%number_symbol_in_use%+33
    set symbol_in_use=%symbol_in_use% %group_ru_small%
)
if %use_symbol_ru_big%==yes (
    set /a number_symbol_in_use=%number_symbol_in_use%+33
    set symbol_in_use=%symbol_in_use% %group_ru_big%
)
if %use_symbol_numbers%==yes (
    set /a number_symbol_in_use=%number_symbol_in_use%+10
    set symbol_in_use=%symbol_in_use% %group_numbers%
)
if %use_symbol_special%==yes (
    set /a number_symbol_in_use=%number_symbol_in_use%+16
    set symbol_in_use=%symbol_in_use% %group_special%
)
 
:: вычисляем интервал принадлежащий одному символу
set /a symbol_step_random=32767/%number_symbol_in_use%
 
:: запускаем цикл с шагом 1 и длиной в кол-во символов в пароле с передачей рандомного числа
for /l %%a in (1,1,%length_pass%) do call :randominaze %RANDOM%
 
echo Random password  -  %passkey%
 
pause>nul
 
exit /b 0
 
:randominaze
 
set randomnumber=%RANDOM%
set cycle_number=0
set previous_number_letter=0
for %%b in (%symbol_in_use%) do call :division %%b
exit /b 0
 
:division
set letter=%1
set /a cycle_number=%cycle_number%+1
set /a number_letter=%symbol_step_random%*%cycle_number%
if /i %randomnumber% LEQ %number_letter% (
    if /i %randomnumber% GTR %previous_number_letter% (
        set passkey=%passkey%%letter%
    )
)
set previous_number_letter=%number_letter%
exit /b 0
6
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
16.05.2013, 23:44  [ТС] #37
Прогрессбары

1.
Полезные BAT/CMD скрипты

2.
Полезные BAT/CMD скрипты
12
Вложения
Тип файла: rar прогресс.rar (471 байт, 833 просмотров)
Тип файла: rar Прогрессбар.rar (604 байт, 939 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
09.06.2013, 16:41  [ТС] #38
Функция определения версии, разрядности и сборки операционной системы

от Dragokas и Koza Nozdri

v. 1 - через ver


Bash
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
@echo off
SetLocal EnableExtensions
 
Call :GetSystemVersion "OSVer" "Core" "Build"
Echo Your operating system: %OSVer% %Core% %Build%
 
pause
goto :eof
 
:GetSystemVersion
:: Определить версию ОС
:: %1-исх.Переменная для хранения названия ОС
:: %2-исх.Переменная для хранения разрядности ОС
:: %3-исх.Переменная для хранения версии сборки ОС
  Set "Bitness=x64"& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set "Bitness=x32"
  set "%~2=%Bitness%"
  For /F "delims=" %%a in ('ver') do set _ver=%%a
  Set _ver="%_ver: =" "%"
  For %%a in (%_ver%) do set _ver=%%~a
  for /F "delims=]" %%a in ("%_ver%") do set %~3=%%a
  set _ver=%_ver:~0,3%
  SET %~1=Unknown
  if "%_ver%"=="5.0" SET %~1=Windows 2000
  if "%_ver%"=="5.1" SET %~1=Windows XP
  if "%_ver%"=="5.2" if "%Bitness%"=="x64" (SET %~1=Windows XP) else (SET %~1=Windows 2003)
  if "%_ver%"=="6.0" (
    Reg.exe query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"|>nul Find /i "Vista"&&(
    SET %~1=Windows Vista) || (SET %~1=Windows 2008)
  )
  if "%_ver%"=="6.1" SET %~1=Windows 7
  if "%_ver%"=="6.2" SET %~1=Windows 8
  if "%_ver%"=="6.3" SET %~1=Windows 8.1
  if "%_ver%"=="6.4" SET %~1=Windows 10
  if "%_ver%"=="10." SET %~1=Windows 10
  set _ver=
Exit /B


v. 2 - через реестр

Bash
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
@echo off
SetLocal EnableExtensions
 
call :GetSystemVersion "OSVer" "Core" "Build" "Family" "EnvironCore"
 
echo Версия ОС:      %OSVer%
echo Рязрядность ОС: %Core%
echo Сборка:         %Build%
echo Семейство:      %Family%
echo Разрядность среды запуска Batch: %EnvironCore%
 
pause
Exit /B
 
:GetSystemVersion [OSVersion] [OSCore] [OSBuild] [OSFamily] [EnvironmentCore]
:: Определить версию ОС
:: %1-исх.Переменная для хранения названия ОС
:: %2-исх.Переменная для хранения разрядности ОС
:: %3-исх.Переменная для хранения версии сборки ОС
:: %4-исх.Переменная, идентифицирующая семейство ОС (9x, NT, Vista)
:: %5-исх.Переменная, идентифицирующая разрядность среды, из-под которой запущен скрипт
  Set "xOS=x64"& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set "xOS=x32"
  set "%~2=%xOS%"
  set "%~5=x32"& if "%xOS%"=="x64" echo "%PROGRAMFILES%" |>nul find "x86" || set "%~5=x64"
  set "_key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
  For /f "tokens=2*" %%a In ('Reg.exe query "%_key%" /v "CurrentBuildNumber"^|Find "CurrentBuildNumber"') do set "%~3=%%~b"
  For /f "tokens=2*" %%a In ('Reg.exe query "%_key%" /v "CurrentVersion"^|Find "CurrentVersion"') do set "_ver=%%~b"
  For /f "tokens=2*" %%a In ('Reg.exe query "%_key%" /v "ProductName"^|Find "ProductName"') do set "%~1=%%~b"
  if "%_ver:~0,1%"=="6" (set "%~4=Vista") else (set "%~4=NT")
Exit /B
3
Dragokas
Эксперт WindowsАвтор FAQ
16922 / 7007 / 851
Регистрация: 25.12.2011
Сообщений: 10,803
Записей в блоге: 16
09.06.2013, 16:42  [ТС] #39
Определение разрядности среды, из которой запущен бат-файл

Определение разрядности ОС: gora
-||- среды: Dragokas.
UPD. 08.09.2012 (поправил скрипт для работы в x32-разрядных системах).

Bash
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
SetLocal EnableExtensions
 
Call :GetEnvironCore EnvCore
echo Этот сценарий запущен в среде с разрядностью: %EnvCore%
pause
goto :eof
 
:GetEnvironCore
  set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 set xOS=x32
  set %~1=x32& if "%xOS%"=="x64" echo "%PROGRAMFILES%" |>nul find "x86" || set %~1=x64
Exit /B
4
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
09.06.2013, 19:50 #40
Время работы системы
Bash
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
@echo off & setlocal ENABLEEXTENSIONS
call :Uptime d h n s
echo/Uptime is: %d% days, %h% hours, %n% minutes, %s% seconds.
goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:Uptime days hours mins [secs]
::
:: By:   Ritchie Lawrence, [url]http://www.commandline.co.uk[/url]
::
:: Func: Возвращает время аптайма лок.машинки в днях, часах, минутах и секундах
:: 
:: Args: %1 перем. для дней
::       %2 перем. для часов
::       %3 перем. для минут
::       %4 перем. для секунд
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS & set "c=net statistics work"
set t=2&if "%date%z" LSS "A" set t=1
for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('echo/^|date') do (
  for /f "tokens=%t%-4 delims=.-/ " %%d in ('date/t') do (
    set %%a=%%d&set %%b=%%e&set %%c=%%f))
for /f "tokens=5-8 delims=:. " %%a in ('echo/^|time') do (
  set "hh=%%a" & set "nn=%%b" & set "ss=%%c")
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
set /a hh=100%hh%%%100,nn=100%nn%%%100,f=j*1440+hh*60+nn
for /f "tokens=3-8 delims=/:M " %%a in ('%c%^|findstr/b /c:"Stat"') do (
  set mm=%%a&set dd=%%b&set yy=%%c&set hh=%%d&set nn=%%e%%f)
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
if {%nn:~2,1%} EQU {P} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
if {%nn:~2,1%} EQU {A} if "%hh%" EQU "12" set hh=00
if {%nn:~2,1%} GEQ {A} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,s=j*1440+hh*60+nn,n=f-s
set /a d=n/1440,n%%=1440,h=n/60,n%%=60
endlocal & set "%1=%d%" & set "%2=%h%" & set "%3=%n%" ^
  & (if "%4" NEQ "" set "%4=%ss%") & goto :EOF
3
09.06.2013, 19:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2013, 19:50
Привет! Вот еще темы с решениями:

zenity.exe в bat\cmd
Приветствую всех! Гуру помогите разобраться, решил вот использовать утилиту...

Не запускаются ни bat, ни cmd файлы...
Стоит WinXP SP3. В общем захожу в любой bat и cmd файл, а мне все время пишет:...

Доступные уроки по CMD/BAT
Гугл и Яндекс молчат по этому поводу. Нужны ссылки на доступные (НЕ видео)...

Числовые операторы в CMD/BAT
Чего они делают объясните? взято из set /? Добавлено через 1 час Унарные...


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

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

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