Форум программистов, компьютерный форум, киберфорум
Наши страницы

Batch (CMD/BAT)

Войти
Регистрация
Восстановить пароль
 
 
Dragokas
Эксперт WindowsАвтор FAQ
16614 / 6999 / 848
Регистрация: 25.12.2011
Сообщений: 10,795
Записей в блоге: 16
#1

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

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

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

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

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


Схожая тема: BAT/CMD файлы
Смежная тема: Полезные VBS скрипты и программы по работе с ними
Ссылка на набор полезных скриптов (предыдущая шапка от bombus) BAT/CMD файлы


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

Архивация и резервное копирование
Создание 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):

Batch (CMD/BAT) несколько заданий на CMD/BAT - CMD/BAT
1.Напишите bat файл на диске с ,который будет искать на всех дисках файлы с расширением exe,скопирует на диск с папку EXE в сортированном ...

Меню в BAT/CMD - CMD/BAT
Вопрос от полного ламера. У меня такая проблемма надо сделать меню в CMD чтобы при нажатии 1 Выполнялся один сценарий при нажатии 2...

несколько заданий на CMD/BAT - CMD/BAT
очень прошу, помогите с этими задачками :(... 1.Напишите командный .bat-файл, который при запуске добавляет в файл delta.txt...

сортировка по времени в bat/cmd - CMD/BAT
сабж в папке А лежит bat, который в папке Б сортирует все файлы по времени и оставляет только 10 самых свежих спасибо заранее

Числовые операторы в CMD/BAT - CMD/BAT
Чего они делают объясните? взято из set /? Добавлено через 1 час Унарные операторы: set /a y=&quot;!&quot;%x% дает результат(%y%) 1...

zenity.exe в bat\cmd - CMD/BAT
Приветствую всех! Гуру помогите разобраться, решил вот использовать утилиту zenity.ехе для вывода предупреждающего текста. То есть идея...

160
Kиpилл
Особый статус
Эксперт WindowsВирусоборец
8080 / 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 Кб, 248 просмотров)
Тип файла: 7z Выполнить проверку sfc_scannow 0.5.7z (4.1 Кб, 52 просмотров)
Kиpилл
Особый статус
Эксперт WindowsВирусоборец
8080 / 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 байт, 134 просмотров)
Тип файла: 7z sfc pe 0.2.7z (1,016 байт, 40 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16614 / 6999 / 848
Регистрация: 25.12.2011
Сообщений: 10,795
Записей в блоге: 16
04.04.2013, 00:17  [ТС] #33
Цветная роза с использованием только встроенных команд консоли
Уточню, что Microsoft не предусмотрела изначально, чтобы в консоли можно использовать одновременно более 1 цвета шрифта/фона без сторонних средств на DOS-е.
Пришлось прибегнуть к одному трюку, ранее нигде не опубликованному.

Часть обсуждения по данному скрипту находится здесь: Цветной вывод в консоли (обсуждение кода розы)
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 / 242
Регистрация: 06.01.2013
Сообщений: 4,177
Завершенные тесты: 1
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
16614 / 6999 / 848
Регистрация: 25.12.2011
Сообщений: 10,795
Записей в блоге: 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 Кб, 802 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16614 / 6999 / 848
Регистрация: 25.12.2011
Сообщений: 10,795
Записей в блоге: 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
16614 / 6999 / 848
Регистрация: 25.12.2011
Сообщений: 10,795
Записей в блоге: 16
16.05.2013, 23:44  [ТС] #37
Прогрессбары

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

2.
Полезные BAT/CMD скрипты
12
Вложения
Тип файла: rar прогресс.rar (471 байт, 828 просмотров)
Тип файла: rar Прогрессбар.rar (604 байт, 933 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16614 / 6999 / 848
Регистрация: 25.12.2011
Сообщений: 10,795
Записей в блоге: 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
16614 / 6999 / 848
Регистрация: 25.12.2011
Сообщений: 10,795
Записей в блоге: 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 / 366
Регистрация: 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
sov44
1758 / 742 / 128
Регистрация: 09.04.2011
Сообщений: 1,313
09.06.2013, 20:16 #41
Альтернативный вариант определения разрядности ОС по значению реестра
Bash
1
2
3
4
@Echo Off
 
2>nul Reg Query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion |Find /i "Installer" >nul && (echo Разрядность ОС: х64) || (echo Разрядность ОС: х86)
pause
Ради прикола можно проверить разрядность х64 и по наличию директории Sysnative в %WinDir%
1
Dragokas
Эксперт WindowsАвтор FAQ
16614 / 6999 / 848
Регистрация: 25.12.2011
Сообщений: 10,795
Записей в блоге: 16
09.06.2013, 23:21  [ТС] #42
Цитата Сообщение от sov44 Посмотреть сообщение
Ради прикола можно проверить разрядность х64 и по наличию директории Sysnative в %WinDir%
Я раньше проверял саму папку Sysnative и ничего не получалось, а надо было проверять наличие файлов в ней. Поэтому здесь в разделе об этом не писал. Хотя в статье именно так и делал.
Не считаю за прикол, это вполне нормальный способ, но в 100% случаев будет работать только в OS >= Vista* (если не отключить систему редиректа):

Bash
1
if exist "%windir%\Sysnative\*" (echo Разрядность ОС: х86) else (echo Разрядность ОС: х64)
* Sysnative в Windows XP и 2003.
HotFix for Windows 2003 and Windows XP available

There is a hotfix available that backports the "sysnative" alias for Windows 2003 and Windows XP.

A 32-bit application cannot access the system32 folder on a computer that is running a 64-bit version of Windows Server 2003 or of Windows XP

http://support.microsoft.com/kb/942589
2
Charles Kludge
Клюг
7641 / 3156 / 366
Регистрация: 03.05.2011
Сообщений: 8,382
11.06.2013, 00:56 #43
Практическое применение Конвертации даты/времени из/в UNIX-формат - вычисление даты от текущей ±n дней(лишние комменты убраны, см оригинал). Убрано также вычисление времени(для ускорения процесса).
Кликните здесь для просмотра всего текста
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 :DateToSecs %date:~-4% %date:~-7,2% %date:~-10,2% secs
 
set /A adj=%1*3600*24
set /A dsecs=secs+adj
 
call :SecsToDate %dsecs% yy mm dd 
echo/Offset from %DATE% by %1 days is: %dd%-%mm%-%yy% 
 
goto :EOF
:DateToSecs %yy% %mm% %dd% secs
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
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
set /a j=j*86400
endlocal&set %4=%j%&goto :EOF
goto :EOF
 
:SecsToDate %secs% yy mm dd 
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%)
endlocal&set %4=%dd%&set %3=%mm%&set %2=%yy%&goto :EOF
3
Миниатюры
Полезные BAT/CMD скрипты  
Dragokas
Эксперт WindowsАвтор FAQ
16614 / 6999 / 848
Регистрация: 25.12.2011
Сообщений: 10,795
Записей в блоге: 16
01.07.2013, 03:42  [ТС] #44
Чтение/запись INI-файла
(с несколькими одноименными секциями и параметрами в границах секции)

Автор: Dragokas

Функционал:
- запрос перечня имен всех секций (с отображением кол-ва их повторов)
- запрос перечня имен всех параметров в границах определенной секции (с отображением кол-ва их повторов).
- возможность установки фильтра для запроса только конкретной секции или параметра.
- запрос значения из определенного параметра в конкретной секции.
- запись значения в определенный параметр конкретной секции.
- демонстрационный режим.

Все данные выводятся на экран консоли.

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
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
set inifile=settings.ini
 
echo Демонстрация
echo.
echo.Имена всех секций с кол-вом повторов:
call :ini.ShowSections "%inifile%"
::pause
echo.
echo.Кол-во повторов секции [AV]
call :ini.ShowSections "%inifile%" [AV]
::pause
echo.
echo.Имена и кол-во повторов всех параметров 2-й секции [AV]
call :ini.ShowKeys "%inifile%" "[AV]" 2
::pause
echo.
echo.Кол-во повторов параметра ARM во 2-й секции [AV]
call :ini.ShowKeys "%inifile%" "[AV]" 2 ARM
::pause
echo.
echo.Значение 3-го параметра ARM во 2-й секции [AV]
call :ini.ReadKey "%inifile%" "[AV]" 2 ARM 3
::pause
echo.
echo.Запись нового значения в 3-й параметр ARM 2-й секции [AV]
call :ini.WriteKey "%inifile%" "[AV]" 2 ARM 3 "NewValue"
::pause
echo.
echo.Проверка записи: значение 3-го параметра ARM во 2-й секции [AV]
call :ini.ReadKey "%inifile%" "[AV]" 2 ARM 3
 
pause
EndLocal
Exit /B
 
 
:ini.WriteKey
::%1 - путь к файлу
::%2 - имя секции
::%3 - порядковый номер секции (если имеются одноименные), иначе указывайте 1
::%4 - имя параметра
::%5 - порядковый номер параметра (если имеются одноименные), иначе указывайте 1
::%6 - записываемое значение
  SetLocal
  for /f "UseBackQ delims=" %%s in ("%~1") do (
    if Defined BeginRead (
      for /f "tokens=1* delims==" %%k in ("%%s") do (
        set ini.Key.Name=%%k
        call :TrimSpaces "!ini.Key.Name!" " " "ini.Key.Name"
        if /i "!ini.Key.Name!"=="%~4" (
          Set /A ini.Keys.Count+=1
          if !ini.Keys.Count!==%~5 (
            >>"%~1_" echo !ini.Key.Name!=%~6
            set JustWritedValue=true
          )
        )
      )
    )
    if not Defined JustWritedValue (
      echo %%s>>"%~1_"
    ) else (
      set JustWritedValue=
      set BeginRead=
      set LastLines=true
    )
    if not Defined LastLines (
      set ini.Section.Name=%%s
      call :TrimSpaces "!ini.Section.Name!" " " "ini.Section.Name"
      if /i "!ini.Section.Name!"=="%~2" (
        set /A ini.Sections.Count+=1
        if !ini.Sections.Count!==%~3 (
          Set BeginRead=true
        )
      )
    )
  )
  if Defined LastLines >nul copy /y "%~1_" "%~1"
  2>nul del "%~1_"
  EndLocal
Exit /B
 
 
:ini.ReadKey
::%1 - путь к файлу
::%2 - имя секции
::%3 - порядковый номер секции (если имеются одноименные), иначе указывайте 1
::%4 - имя параметра
::%5 - порядковый номер параметра (если имеются одноименные), иначе указывайте 1
  SetLocal
  for /f "UseBackQ delims=" %%s in ("%~1") do (
    if Defined BeginRead (
      for /f "tokens=1* delims==" %%k in ("%%s") do (
        set ini.Key.Name=%%k
        call :TrimSpaces "!ini.Key.Name!" " " "ini.Key.Name"
        if /i "!ini.Key.Name!"=="%~4" (
          Set /A ini.Keys.Count+=1
          if !ini.Keys.Count!==%~5 (
            Set ini.Value=%%l
            call :TrimSpaces "!ini.Value!" " " "ini.Value"
            echo.!ini.Value!
            EndLocal
            Exit /B
          )
        )
      )
    ) else (
      set ini.Section.Name=%%s
      call :TrimSpaces "!ini.Section.Name!" " " "ini.Section.Name"
      if /i "!ini.Section.Name!"=="%~2" (
        set /A ini.Sections.Count+=1
        if !ini.Sections.Count!==%~3 (
          Set BeginRead=true
        )
      )
    )
  )
  EndLocal
Exit /B
 
 
:ini.ShowKeys
::%1 - путь к файлу
::%2 - имя секции
::%3 - порядковый номер секции (если имеются одноименные), иначе указывайте 1
::%4 - (опционально) - имя параметра
  SetLocal
  set ini.Keys.Count=0
  for /f "UseBackQ delims=" %%s in ("%~1") do (
    set ini.Section.Name=%%s
    if "!ini.Section.Name:~0,1!"=="[" if Defined BeginRead goto ext_ShowKeys
    if Defined BeginRead (
      for /f "tokens=1* delims==" %%k in ("%%s") do (
        set ini.Key.Name=%%k
        call :TrimSpaces "!ini.Key.Name!" " " "ini.Key.Name"
        if "%~4"=="" (set seekKey=!ini.Key.Name!) else (set seekKey=%~4)
        if /i "!ini.Key.Name!"=="!seekKey!" (
          rem Количество параметров с одинаковым именем
          rem set /A ini.Keys["%%k"].Count+=1
          call set n_Keys=%%ini.Keys["!ini.Key.Name!"].Count%%
          set /A n_Keys+=1
          set ini.Keys["!ini.Key.Name!"].Count=!n_Keys!
          if not Defined ini.Keys["!ini.Key.Name!"] (
            set ini.Keys["!ini.Key.Name!"]=true
            set /A ini.Keys.Count+=1
            set ini.Keys[!ini.Keys.Count!].Name=!ini.Key.Name!
          )
        )
      )
    ) else (
      call :TrimSpaces "!ini.Section.Name!" " " "ini.Section.Name"
      if /i "!ini.Section.Name!"=="%~2" (
        set /A ini.Sections.Count+=1
        if !ini.Sections.Count!==%~3 (
          Set BeginRead=true
        )
      )
    )
  )
  :ext_ShowKeys
  for /L %%C in (1,1,!ini.Keys.Count!) do (
    set Key.Name=!ini.Keys[%%C].Name!
    call echo %%ini.Keys["!Key.Name!"].Count%% !Key.Name!
  )
  EndLocal
Exit /B
 
 
:ini.ShowSections
::%1 - путь к файлу
::%2 - (опционально) - имя секции
  SetLocal
  set ini.Sections.Count=0
  for /f "UseBackQ delims=" %%s in ("%~1") do (
    set ini.Section.Name=%%s
    call :TrimSpaces "!ini.Section.Name!" " " "ini.Section.Name"
    if "!ini.Section.Name:~0,1!"=="[" (
      if "%~2"=="" (set seekSection=!ini.Section.Name!) else (set seekSection=%~2)
      if /i "!ini.Section.Name!"=="!seekSection!" (
        rem Количество секций с одинаковым именем
        rem set /A ini.Sections["%%s"].Count+=1
        call set n_Sections=%%ini.Sections["!ini.Section.Name!"].Count%%
        set /A n_Sections+=1
        set ini.Sections["!ini.Section.Name!"].Count=!n_Sections!
        if not Defined ini.Sections["!ini.Section.Name!"] (
          set ini.Sections["!ini.Section.Name!"]=true
          set /A ini.Sections.Count+=1
          set ini.Sections[!ini.Sections.Count!].Name=!ini.Section.Name!
        )
      )
    )
  )
  for /L %%C in (1,1,!ini.Sections.Count!) do (
    set Section.Name=!ini.Sections[%%C].Name!
    call echo %%ini.Sections["!Section.Name!"].Count%% !Section.Name!
  )
  EndLocal
Exit /B
 
::Удаляет слева и справа лишние пробелы, или другие подряд идущие символы, заданные переменной %2 (Symbol)
:TrimSpaces
::%1-in.String
::%2-in.Symbol
::%3-out.String.Variable
  Set "%~3="
  Set "_String=%~1"
  if "%_String%"=="" Exit /B
  :Begin_Trim_Left
    if "%_String:~0,1%"=="%~2" (set "_String=%_String:~1%"& Goto Begin_Trim_Left)
  if "%_String%"=="" Exit /B
  :Begin_Trim_Right  
    if "%_String:~-1%"=="%~2" (set "_String=%_String:~0,-1%"& Goto Begin_Trim_Right)
  set "%~3=%_String%"
Exit /B
Исходник, на чем тестил

Цитата Сообщение от settings.ini
[AV]
name = Ka28,Ka31
type_TP = 1
non-stand = 1
Vpos = 0
aK = 40
aG = 18
d = 0
uK = 5.0
uG = 1.5
cource = 353.65
arm = 600
default = 2
[GL]
glide1 = 3.75
distance1 = 0
KodTr380 = 1
prPosADRM = 0
[GL]
glide1 = 1.7833
distance1 = 1000
glide2 = 4.3
KodTr380 = 2
prPosADRM = 1
[GL]
glide1 = 4
distance1 = 0
KodTr380 = 1
prPosADRM = 0
[GL]
glide1 = 2.7
distance1 = 0
KodTr380 = 1
prPosADRM = 0

[AV]
name = MiG-29
type_TP = 0
non-stand = 0
Vpos = 220
aK = 40
aG = 18
d = 3500
uK = 5.0
uG = 1.5
cource = 353.65
arm = 600
default = 2
arm = 700
arm = 800
d = 3600
arm = 900
arm = 1000
uK = 6.0
4
Миниатюры
Полезные BAT/CMD скрипты  
Вложения
Тип файла: rar ini.rar (1.8 Кб, 128 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16614 / 6999 / 848
Регистрация: 25.12.2011
Сообщений: 10,795
Записей в блоге: 16
22.07.2013, 00:28  [ТС] #45
Добавление папки c:\MinGW\bin в системную переменную окружения Path

Алгоритм работы:
  • Проверяет, запускается ли gcc
  • Проверяет права для запуска
  • Проверяет, существует ли добавляемая папка
  • Если нет, предлагает варианты: все равно продолжить, либо выбрать другое расположение папки
  • Отображает содержимое Path до и после операции
  • В конце проверяет, запускается ли gcc

Если MinGW* установлен в другую папку, можно сразу ее изменить в строке № 6.
* MinGW - это компилятор C++.

Кликните здесь для просмотра всего текста
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
:: This Batch file will add c:\MinGW\bin folder to the System Environment "Path"
@echo off
SetLocal EnableDelayedExpansion
set Key=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
 
set FolderToAdd=c:\MinGW\bin\
 
echo Проверка запуска gcc.exe ...
call :CheckGCC && (
  if "%~1"=="" (
    echo MinGW binary уже добавлена к Path.
    echo.
    pause& goto :eof
  ) else (
    echo MinGW binary была успешно добавлена к Path.
    echo.
    pause& goto :eof
  )
) || (
  if "%~1"=="" (
    echo MinGW пока не добавлена к Path.
    echo Запускаю процедуру...
    echo.
  ) else (
    echo MinGW binary не удалось добавить к Path.
    echo Возможно, требуется перезагрузка.
    echo.
    pause& goto :eof
  )
)
 
call :CheckPrivileges
 
:CheckExists
if not exist "%FolderToAdd%" (
  echo Папка "%FolderToAdd%" не существует.
  set ch=y
  set /p "ch=Все равно продолжить? (Y/N) "
  if /i "!ch!"=="N" (
    set /p "ch=Хотите ввести новое расположение папки? (Y/N) "
    if /i "!ch!"=="N" (
      goto :eof
    ) else (
      set /p "FolderToAdd=Ожидаю ввода новой папки для добавления к Path > "
      goto :CheckExists      
    )
  )
)
echo До:
path
echo.
:: Получаем текущее значение Path
For /f "tokens=2*" %%a In ('Reg.exe query "%key%" /v Path^|Find "Path"') do set "CurPath=%%~b"
:: Создаем перманентный бекап содержимого Path
if not exist "%temp%\Path_Backup.txt" echo.%CurPath%>"%temp%\Path_Backup.txt"
:: Добавляем к Path
echo Y|reg.exe add "%Key%" /v Path /t REG_EXPAND_SZ /d "%CurPath%;%FolderToAdd%"
:: Эта команда содержит API для обновления пользовательских настроек Path
:: Судя из обсуждения [url]http://www.cyberforum.ru/cmd-bat/thread674821.html#post4499399[/url]
:: это должно быть сейфово
:: 1. Для >= Vista
setx temp "%temp%"
:: 2. Для <= XP без SP ?
rundll32 user32.dll,UpdatePerUserSystemParameters
echo.
echo Операция завершена.
Echo.
echo После:
echo.
For /f "tokens=2*" %%a In ('Reg.exe query "%key%" /v Path^|Find "Path"') do echo Path=%%~b
echo.
pause
start cmd /c "%~f0" check
::<nul set /p x=Operation compeleted. Closing...
::For /L %%C in (5,-1,1) do <nul set /p x=%%C.&1>nul 2>&1 ping 127.1 -n 2
goto :eof
 
:CheckPrivileges
  sfc /? |>nul find /i "/scannow"&& set errorlevel=0
  if %errorlevel% neq 0 (
    echo Требуются повышенные права, чтобы выполнить эту операцию.
    rem echo Press {ENTER} to continue.
    rem pause >nul
    Echo CreateObject^("Shell.Application"^).ShellExecute WScript.Arguments^(0^),"","","runas",1 >"%~dp0Elevating.vbs"
    cscript.exe //nologo "%~dp0Elevating.vbs" "%~dpnx0"
    Exit
  ) else (
  >nul 2>&1 del "%~dp0Elevating.vbs"
Exit /B
)
 
:CheckGCC
  gcc --help >nul 2>&1
Exit /B %errorlevel%
1
Вложения
Тип файла: rar MinGW_Path.rar (1.5 Кб, 141 просмотров)
22.07.2013, 00:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2013, 00:28
Привет! Вот еще темы с ответами:

Не запускаются ни bat, ни cmd файлы... - CMD/BAT
Стоит WinXP SP3. В общем захожу в любой bat и cmd файл, а мне все время пишет: Windows не удалось найти 'путь к файлу'. Проверьте, что...

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

Специальные символы в CMD/BAT - CMD/BAT
Добрый вечер. Вопрос по поводу специальных символов в BAT: &lt; , &gt; , &gt;&gt; , /? , * , ? , ; , | , &amp; , &amp;&amp; , || , ( ) , { }, может кто-нибудь...

Парсер txt файла? [CMD/BAT] - CMD/BAT
Добрый вечер. Подскажите, как с помощью BAT пропарсить файл 1.txt, содержащий строки вида: 192.168.102.123 kjdfsd87USHIhf ...


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

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

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