С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.51/1709: Рейтинг темы: голосов - 1709, средняя оценка - 4.51
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
1

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

15.10.2012, 00:56. Просмотров 321668. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

160
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
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 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
Клюг
7645 / 3160 / 382
Регистрация: 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
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 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 Кб, 132 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 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 Кб, 142 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
10.08.2013, 18:06  [ТС] 46
Удаление с рабочего стола всех TXT файлов.
Для удаления с рабочего стола, нужно сначала определить, где он находится (в разных локализациях XP и Win7 по-разному).
Можно средствами JScript-a получить это расположение однозначно:

Bash
1
2
3
4
5
6
7
8
@set @x=0; /*
@echo off
SetLocal EnableExtensions
For /F "delims=" %%? in ('cscript //nologo /e:jscript "%~f0"') do set desktop=%%?
echo del /F /Q "%desktop%\*.txt"
pause
exit /B
*/WScript.echo (new ActiveXObject("Wscript.Shell").SpecialFolders("Desktop"));
Для боевого запуска (удаление *.txt файлов) убрать echo.
1
MihaniX
135 / 45 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
14.08.2013, 20:23 47
Очень полезная команда: POWERCFG
Подробности powercfg /?

Прим. от Dragokas:

Не по теме:

хотя бы какие-то примеры в этот раздел давайте.


Отключение спящего режима в Windows 7 и удаление файла hiberfil.sys

Многих пользователей Windows 7 волнует вопрос, как удалить файл hiberfil.sys. Вполне естественно, ведь этот файл занимает довольно много места на жестком диске – иногда несколько гигабайт.

Файл hiberfil.sys создается операционной системой для функционирования спящего режима. При переходе компьютера в спящий режим Windows сбрасывает содержимое оперативной памяти на жёсткий диск – в файл hiberfil.sys, а при включении загружает этот файл в память.

Если вы не пользуетесь спящим режимом, то:

1. Войдите в Windows 7 с правами администратора.
2. Откройте Панель управления -> Электропитание -> Настройка перехода в спящий режим.
3. В раскрывающемся списке «Переводить компьютер в спящий режим» выберите «Никогда» и сохраните изменения.
4. Запустить командную строку с повышенными правами
5. Введите команду
Bash
powercfg -h off
или
Bash
powercfg –hibernate –off
После это файл hiberfil.sys в корне системного раздела можно удалить.
2
amitoria
37 / 0 / 0
Регистрация: 16.08.2013
Сообщений: 4
16.08.2013, 18:27 48
Создание серии скриншотов с помощью IrfanView

Вначале надо скопировать i_view32.exe с *.ini-файлом в C:\windows
Потом создать MakePics.bat
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
rem @echo off
setlocal enabledelayedexpansion EnableExtensions
set task=i_view32.exe
::Префикс имени файла
set filename=pic_
::Количество картинок
set count=9999
 
For /L %%? in (1 1 %count%) do (
  set num=000%%?
  set num=!num:~-4!
  set FN=%filename%!num!.jpg
  start "" "%task%" "/capture=1" "/convert=$U(%%Y_%%m_%%d)\$U(%%H.%%M)\!FN!"
  cscript //nologo sleep.js 300
)
Параметр "/capture=1" указывает на то, что надо сделать скрин всего экрана, если поменять на 2, сделает скрин активного окна.
"/convert=$U(%%Y_%%m_%%d)\$U(%%H.%%M)\ просто создает папки, используя шаблоны имен(см.справку к IrfanView), которые поддерживаются программой. Каждую минуту программа будет продолжать сохранение скринов в отдельную папку. Это сделано, чтоб можно было отключить скрипт и при повторном включении через минуту он не начал заново все сохранять в старое место, затирая предыдущие файлы).

cscript //nologo sleep.js 300 - эта строка запускает скрипт, дающий задержку перед каждым запуском программы, 300 - это задержка 300мс.

Вот этот скрипт sleep.js
Javascript
1
2
3
4
if(WScript.Arguments.Unnamed.length){
  var milliseconds=WScript.Arguments.Unnamed(0);
  WScript.Sleep(milliseconds);
}
Когда скрины готовы, их надо спихнуть в одну папку, чтоб номера шли по очереди от начала до конца и запустить программку x264.
Вот файл для запуска этой программы MakeVideo.bat
Bash
1
x264 --fps 3 --sar 640:480 -o vid.mkv "pic_%%04d.jpg"
x264 можно скачать отсюда http://download.videolan.org/pub/x264/binaries
--fps это число кадров в секунду, в нашем примере скрины создавались каждые 300 мс, значит, в секунду 3 штуки выходит, но можно и с другой скоростью кадров все проделать, я поставил 3 для "реалистичности"))
Кстати, x264 обычно используется для сжатия видео, там есть короткая и понятная справка, если вдруг понадобится --h.
0
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
25.08.2013, 22:11  [ТС] 49
Поиск папок в корне всех физических дисков по части имени

Когда дисков много и уже не помнишь, куда закинул папку
Оформлено в виде меню, с быстрым переходом к найденной папке по номеру.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
Set /p "Seek=Введите часть имени искомой папки: "
For /F "tokens=2 delims==" %%D in ('wmic logicaldisk where drivetype^=3 get caption /value^| find /i "Caption"') do (
  set Disk=%%D
  set Disk=!Disk:~0,2!
  set Again=
  for /f "delims=" %%? in ('dir /B /AD "!Disk!\*" ^| find /i "%Seek%"') do (
    if not Defined Again (
      set Again=true
      echo.
      echo Drive !Disk!
      echo ============      
    )
    Set /A C+=1
    Set Folder.!C!=!Disk!\%%?
    echo !C!. %%?
))
Echo.
set /p "ch=Выберите № папки для перехода: "
start "" "!Folder.%ch%!"
2) Тоже самое, но для поиска папок 1-2 уровня вложенности (ищет имя корневой и имя одного из её подкаталогов)

Кликните здесь для просмотра всего текста

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
Set /p "Seek=Введите часть имени искомой папки: "
For /F "tokens=2 delims==" %%D in ('wmic logicaldisk where drivetype^=3 get caption /value^| find /i "Caption"') do (
  echo Disk=%%D
  set Disk=%%D
  set Disk=!Disk:~0,2!
  set Again=
  for /f "delims=" %%? in ('dir /B /AD "!Disk!\*"') do (
    for /f "delims=" %%+ in ('2^>NUL dir /B /AD "!Disk!\%%?\*" ^| find /i "%Seek%"') do (
      if not Defined Again (
        set Again=true
        echo.
        echo Drive !Disk!
        echo ============      
      )
      Set /A C+=1
      Set Folder.!C!=%%?\%%+
      echo !C!. %%?\%%+
)))
Echo.
set /p "ch=Выберите № папки для перехода: "
start "" "!Folder.%ch%!"
3
Миниатюры
Полезные BAT/CMD скрипты  
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
08.09.2013, 15:42  [ТС] 50
Пример монтирования ISO-образа с помощью Daemon Tools Lite

Алгоритм:
Определение, установлен ли Daemon Tools
Определение, буквы привода
Если ее нет, устанавливаем драйвер DT
Размонтируем предыдущий образ, монтируем новый.

В коде использован скрипт получения информации о дисках DriveTypes.vbs от Rob van der Woude Источник

Весь процесс можно заменить предусмотренными в руководстве DT командами ком.строки:

Bash
DTLite.exe -get_count dt
DTLite.exe -get_letter dt, 1
За исключением одной "проблемки". В последней версии DT Lite эти команды ничего не возвращают. Вот поэтому выручает батник.

14.07.2017 - скрипт обновлён.
1
Вложения
Тип файла: zip Mount ISO.zip (4.3 Кб, 9 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
08.09.2013, 15:56  [ТС] 51
Как смонтировать образ ISO, используя связку CMD/PowerShell

Совместимость: только Windows 8
Источник: stackoverflow.com
http://blogs.technet.com/b/heyscript...t-15-blog.aspx
http://technet.microsoft.com/en-us/library/hh848706.aspx

Bash
1
2
3
4
5
6
7
8
set WindowsISO=c:\Windows7.ISO
 
ECHO -Mounting Original Windows ISO File-
powershell.exe "Mount-DiskImage ""%WindowsISO%"""
FOR /F "skip=3" %%I IN ('powershell.exe "Get-DiskImage """%WindowsISO%""" | Get-Volume | Select-Object {$_.DriveLetter}"') DO echo Disk %%I
pause
ECHO -Unmounting Original Windows ISO File-
powershell.exe "Dismount-DiskImage ""%WindowsISO%"""
1
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
11.09.2013, 23:52  [ТС] 52
Autogate — резервирование интернет-канала автопереключением шлюзов
2
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
25.09.2013, 14:34  [ТС] 53
Полезная информация для пользователей MS Windows
4
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
29.09.2013, 14:10  [ТС] 54
Administering a Server Core installation (TechNet)

Наборы команд с комментариями для:
  • Configuration and installation
  • Networking and firewall
  • Updates and error reporting
  • Services, processes and performance
  • Event logs
  • Disk and file system
  • Hardware
  • Remote administration
1
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
26.10.2013, 21:30  [ТС] 55
Шаблон батника из контекстного меню "Создать"

Автор: Koza Nozdri & 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
@echo off
Chcp 866 >nul
  title  Пункт меню "Создать..."
  SetLocal EnableExtensions
 
ver |>NUL find "6." && if "%1" neq "Admin" call :elevate
chdir /d "%~dp0"
 
(
  echo @echo off
  echo SetLocal EnableExtensions EnableDelayedExpansion
  echo Chcp 866 ^>nul
  echo title text title
  echo cd /d "%%~dp0"
  echo.
  echo.
  echo.
  echo pause
  echo exit /B
) > "%~dp0new.bat"
 
md %systemdrive%\Windows\ShellNew 2>NUL
copy /y "%~dp0new.bat" %systemdrive%\Windows\ShellNew\
reg.exe add "HKCR\.bat\ShellNew" /ve /f
reg.exe add "HKCR\.bat\ShellNew" /v FileName /d New.bat /f
del /q "%~dp0new.bat"
cls
Echo Пункт создан,перезагрузите компьютер.
Echo Для выхода нажмите Enter
pause>nul
Exit /B
 
:Elevate
  Echo CreateObject^("Shell.Application"^).ShellExecute WScript.Arguments^(0^),"Admin","","runas",1 >"%~dp0Elevating.vbs"
  cscript.exe //nologo "%~dp0Elevating.vbs" "%~dpnx0"
  del "%~dp0Elevating.vbs"
Exit

Сам шаблон получается таким

Bash
1
2
3
4
5
6
7
8
9
10
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
Chcp 866 >nul
title text title
cd /d "%~dp0"
 
 
 
pause
exit /B

Комментарий к шаблону

Bash
@echo off
::Включаем режим выполнения команд без сообщений
 
SetLocal
:: Включение локализации изменений среды в пакетном файле
:: Чтобы изменение переменных в этом батнике не влияли на другие батники, запускаемые по цепочке.
:: Для быстрого обнуления всех переменных (особенно актуально для псевдо-массивов), используя команду EndLocal
 
SetLocal EnableExtensions
:: разрешение использовать дополнительных ключей команд (например FOR /F) и других защит от дурака,
:: например, переход в папку с пробелами без указания кавычек в пути (например CD My Tools)
 
SetLocal EnableDelayedEpansion
:: Возможность получить актуальное значение переменной внутри цикла или блока команд,
:: например указывая вместо %time% знаки восклицания !time!
 
Chcp 866 >nul
:: Включение кодировки 866 для того что бы русский текст не был кракозябрами в сценарии
 
title text title
:: Значение после первого слова title  будет отображаться в названии исполняемого пакетного файла
 
cd /d "%~dp0"
:: Переход в текущий каталог,сокращает код с параметрами типа del bat.bat вместо del %~dp0bat.bat
::То есть при работе с файлами в папке с bat сценарием не надо дописывать аргументы
:: И при этом вы не рискуете по ошибке запороть систему командой типа: del bat.bat
::Не имеющей в скрипте аргумента cd /d "%~dp0"
 
pause
:: До того как будет написана финальная версия кода команда pause будет полезная для выявления ошибок и багов
::Либо для принятия решения о доработке кода
 
exit /B
Выход из текущего пакетного сценария.
5
Миниатюры
Полезные BAT/CMD скрипты  
Вложения
Тип файла: zip CreateBAT.zip (683 байт, 176 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
09.11.2013, 02:41  [ТС] 56
Поиск значения в реестре. Экспорт найденных веток и протоколирование.

Работает весьма медленно - используется чистый CMD - reg.exe.

Кликните здесь для просмотра всего текста

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
@set @x=0; /*
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
cd /d "%~dp0"
mode con cols=140
 
call :About
 
ver | find "6." && if /i "%~1" neq "Admin" cscript.exe //nologo //e:jscript "%~f0"& Exit
echo.
 
Set /p "WhatValue=Enter the value you want to find > "
cls
 
call :About
 
set destFolder=Reg_Result\%WhatValue%
set log=%destFolder%\FindRegValues.log
 
rd "%destFolder%" /S /Q 2>NUL
md "%destFolder%" 2>NUL
 
echo Value: %WhatValue%
echo.
echo Please wait...
echo.
 
For %%? in (
  HKEY_CLASSES_ROOT
  HKEY_CURRENT_USER
  HKEY_LOCAL_MACHINE
  HKEY_USERS
  HKEY_CURRENT_CONFIG
) do (
  Call :SeekHive %%?
  call :BackUP %%?
)
 
echo.
pause
Exit /B
 
 
:SeekHive [Hive Name]
  set pos=0
  set keyN=0
  echo [%~1]
  echo [%~1]>> "%log%"
  For /F "delims=" %%? in (
    'reg query "%~1" /F "%WhatValue%" /S /D') do (
    echo %%?>> "%log%"
    echo %%?
  )
exit /B
 
:Backup
  For /F "delims=" %%? in ('findstr /RC:"^%~1.*" "%log%"') do (
    set /A KeyN+=1
    reg export "%%?" "%destFolder%\!KeyN!.reg" /y 2>NUL 1>&2
  )
Exit /B
 
:About
  echo Registry Value Seeking Tool by Dragokas
  echo.
  echo - Searching the value in Registry
  echo - No case sensitive
  echo - Just in Values
  echo - Backup all routines where this value was fouded.
  echo.
Exit /B
 
*/new ActiveXObject('Shell.Application').ShellExecute (WScript.ScriptFullName,'Admin','','runas',1);
4
JoraVoenyjHaker
Заблокирован
18.11.2013, 06:23 57
Для тех кто пользуеться модемом MTS-E171
я придумал батник который отключает лишний процес OUC

Kill OUC
Bash
1
2
3
4
taskkill /f /IM ouc.exe 
DEL /F /Q "%USERPROFILE%\AppData\Roaming\Connect Manager\ouc.exe"
DEL /F /Q "%USERPROFILE%\AppData\Roaming\Connect Manager\LiveUpdate.ini"
REG DELETE HKCU\Software\Microsoft\Windows\CurrentVersion\Run /f /v "HW_OPENEYE_OUC_Connect Manager"
3
Maks
Модератор
Эксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
3820 / 1930 / 255
Регистрация: 13.03.2013
Сообщений: 8,792
Записей в блоге: 4
20.11.2013, 16:00 58
Получение данных о конфигурации компьютеров а Activ Directory

Совместимость: Windows XP / 7 ru x32, x64.

Для чего это нужно
Когда в сети более 30 компьютеров и Вам необходимо узнать конфигурацию каждого из них, не отвлекая людей от работы и не утруждая себя бегать по всем компьютерам. Работает при наличии сервера Activ Directory, в качестве альтернативы можно использовать сервер администрирования Касперского (проверено).

Развернуть код
if not exist \\10.10.10.10\Share\%COMPUTERNAME%.csv ( \\10.10.10.10\dst\everest.exe /R \\10.10.10.10\Share\%COMPUTERNAME%.csv /CSV /CUSTOM \\10.10.10.10\dst\everest.exe\report_for_itil.rpf ) else exit

Пояснение кода
\\10.10.10.10\Share\ - сетевая папка с общим доступом, куда будут складываться файлы с отчетом о конфигурации;
%COMPUTERNAME%.csv - файл с отчетом, где вместо "%COMPUTERNAME%" будет сетевое имя компьютера;
\\10.10.10.10\dst\everest.exe - путь к каталогу с исполняемым файлом "everest", кстати говоря, можно также использовать и "aida".

Скачать

Everest
AIDA64
report_for_everest.zip - сам батник.
1
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
25.11.2013, 02:07  [ТС] 59
Отображение сообщения MSG в несколько строк из батника в кодировке OEM-866

MSG воспринимает сообщения в кодировке Win-1251, поэтому ... написал такое:
Название: msg.png
Просмотров: 2663

Размер: 10.9 Кб

Bash
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
SetLocal EnableExtensions
call :msg "Строка № 1 \nСтрока № 2"
pause
Exit /B
 
:msg
  chcp 866 >NUL& for /F "delims=" %%a in ("%~1") do chcp 1251 >NUL& call :convert "%%~a"& chcp 866 >NUL& Exit /B
:convert
  set "text=%~1"
  (@for %%a in ("%text:\n=" "%") do @echo.%%~a) | msg *
Exit /B
Чтобы имитировать перенос каретки, используйте \n, как в примере.
4
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
05.01.2014, 21:14  [ТС] 60
Определение версии установленной Java
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
SetLocal EnableExtensions
:: Определяю путь к Program Files. Если система 64-битная, полуучаю путь к 32-битной папке.
if Defined ProgramFiles(x86) (set "java_root=%ProgramFiles(x86)%\Java") else (set "java_root=%ProgramFiles%\Java")
:: Ищу последнюю версию папки с файлом java.exe
For /F "delims=" %%a in ('dir /B /S /A-D "%java_root%\java.exe" 2^>NUL') do set "java_path=%%~dpa"
:: Если такой нет, пишу java_ver=NOT INSTALLED
if not Defined java_path (set "java_ver=NOT INSTALLED"& goto ext_for)
pushd "%java_path%"
:: Парсим вывод из потока ошибок команды java -version
for /F "tokens=3" %%a in ('java -version 2^>^&1') do set "java_ver=%%~a"& goto ext_for
:ext_for
popd
echo JAVA Version is %java_ver%
pause
2
05.01.2014, 21:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2014, 21:14

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

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

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


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

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

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