Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/3152: Рейтинг темы: голосов - 3152, средняя оценка - 4.69
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16

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

15.10.2012, 00:56. Показов 669396. Ответов 185

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

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

Правила темы:
  • При выкладывании скрипта постарайтесь тщательно описывать принцип его работы и по-больше комментировать строки Вашего кода.
  • Код, состоящий из > 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
Прогресс-бар копирования файлов ссылка
Циклическое копирование файлов по каталогам с ожиданием завершения их дозаписи в исходную папку. ссылка
Создание нуль-копии папки для выкладывания на форуме ссылка
Получение серийного номера всех съемных устройств и физических жестких дисков (не разделов). Получение имен разделов физических накопителей (кроме оптических). ссылка

Другое
Расчёт индекса массы тела и идеального веса ссылка
23
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.10.2012, 00:56
Ответы с готовыми решениями:

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

CMD/BAT - Bat для запуска приложения при падении нагрузки ЦП другого процесса
Суть вопроса: есть батник запуска приложения @echo off start /d&quot;C:\Program Files%\программа\1.1.0\программа.exe&quot; Нужно...

Как запустить bat файл командой cmd /k передав bat файлу дополнительные аргументы
Как передать bat файлу, запускаемому через cmd /k аргументы? Это был первый вопрос, а теперь вот сам скрипт: call &quot;C:\Program...

185
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
23.10.2015, 19:36
Студворк — интернет-сервис помощи студентам
Конвертер чисел из шестнадцатиричной системы в десятичную (и обратно), без параметров входит в интерактивный режим.

hex2dec.cmd:
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@echo off
  if "%1" equ "" if not defined run goto:box
  setlocal enabledelayedexpansion
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if "%i%" neq "1" goto:err
    
    2>&1 echo:%1|findstr /irc:"[a-f,x]">nul && (
      2>nul (set /a "nil=0%1" || set /a "nil=0x%1") && echo:!nil! || goto:err
    ) || (
      echo:%1|findstr /irc:"[g-w,y,z]">nul && goto:err
      for /f "tokens=2 delims==" %%i in (
        'cmd /c exit /b %1^&set ^,^|findstr /irc:"code="'
      ) do echo:0x%%i
    )
  endlocal
exit /b
 
:err
  echo:=^>err
exit /b 1
 
:box
  for %%i in (
    "%~n0 v5.13 - converts hex to decimal and vice versa"
    "Copyright (C) 2010-2015 greg zakharov"
    "[Enter .c to clear output data or .q to exit]"
    ""
  ) do echo:%%~i
  setlocal
    set "run=true"
    :loop
    set /p "i=>>> "
    cmd /c "%~f0" %i%
    if "%i%" equ ".c" cls
    if "%i%" equ ".q" goto:eof
    goto:loop
  endlocal
exit /b
Примеры:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
C:\> hex2dec ff
255
 
C:\> hex2dec x512
1298
 
C:\> hex2dec 1298
0x00000512
 
C:\> hex2dec
hex2dec v5.13 - converts hex to decimal and vice versa
Copyright (C) 2010-2015 greg zakharov
[Enter .c to clear output data or .q to exit]
 
>>> x200
512
>>> 8096
0x00001FA0
>>> .q
=>err
 
C:\>
0
 Аватар для ComSpec
3464 / 2002 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
23.10.2015, 23:28
Цитата Сообщение от greg zakharov Посмотреть сообщение
Windows Batch file
12
13
14
      for /f "tokens=2 delims==" %%i in (
        'cmd /c exit /b %1^&set ^,^|findstr /irc:"code="'
      ) do echo:0x%%i


Это оверинжиниринг или обфускация?

Можно ведь написать в одну строку:
Windows Batch file
      cmd/c exit/b %1& echo 0x!=ExitCode!
.
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
24.10.2015, 11:03
Цитата Сообщение от ComSpec
Это оверинжиниринг или обфускация?

Можно ведь написать в одну строку:
Windows Batch file
1
cmd/c exit/b %1& echo 0x!=ExitCode!
Скорее косяк Windows. Тоже полагал, что так проще, но на выходе получается "0х". Так как причина оного косяка пока не установлена, пока такой вот "оверинжениринг".
0
38 / 20 / 1
Регистрация: 24.06.2015
Сообщений: 20
05.11.2015, 10:42
Период, или интервал ожидания, или задержка, или пауза перед выполнением следующей команды.




Вариант 1 - PATHPING.


Windows Batch file
1
pathping -h 1 -p 60000 -q 1 -w 1 localhost
60000 - значение в миллисекундах, в данном случае - 1 минута.
Довольно точный вариант, но использует программу pathping.exe.



Вариант 2 - FOR. Идея от Hyd.


Windows Batch file
1
for /l %%A in (1,1,2222222) do @
2222222 - количество чисел, в процессе перебора которых компьютер (обычного быстродействия) тратит около 1 секунды.
22222220 - для периода около 10 секунд.
Вариант с большой погрешностью, зато без pathping.exe и в одну строку.



Вариант 3 - IF. Исправлен 5.11.2015.


Windows Batch file
1
2
3
4
5
6
7
set seconds=60
:nexttime
set starttime=%time%
:comparetime
if "%time:~-4,1%" equ "%starttime:~-4,1%" goto comparetime
set /a seconds=%seconds%-1 1>nul
if "%seconds%" gtr "0" goto nexttime
60 - период в секундах.
Опирается на ход системного времени.

Проверяем:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
echo %time%
 
set seconds=60
:nexttime
set starttime=%time%
:comparetime
if "%time:~-4,1%" equ "%starttime:~-4,1%" goto comparetime
set /a seconds=%seconds%-1 1>nul
if "%seconds%" gtr "0" goto nexttime
 
echo %time%
cmd /k
Результат:
9:05:19,35
9:06:19,00


Варианты IF и FOR нагружают процессор на ~20%. Если на процессоре вентилятор с тахометром, скорость вращения возрастает, повышая уровень шума.



Вариант 4 - TIMEOUT.


Windows Batch file
1
timeout /t 60
Удобно, но используется программа timeout.exe, включённая начиная только с Windows Vista (всё-таки догадались, что нужна) и период ограничен ~27 часами.



Вариант 5 - CHOICE.


Windows Batch file
1
choice /n /t 60 /d y
Используется программа choice.exe, включённая начиная только с Windows Vista и период ограничен 9999 секундами.
2
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
11.11.2015, 19:15
which.cmd - по функциональности сценарий приближен к полноценному which (без вспомогательных параметров) с тем отличием, что заглядывает в такие закоулки, как встроенные и макрокоманды cmd.

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
24
25
26
27
28
29
30
31
32
33
@echo off
  if "%*" equ "" goto:man
  for %%i in (%*) do call:which %%i
exit /b
 
:man
  for %%i in (
    "Usage: %~n0 COMMAND [...]"
    "Write the full path of COMMAND(s) to standard output."
    ""
    "Note that the command prints only the first match"
    "instead all. It's not a bug but a feature. If you"
    "wish more then you should use Cygwin."
  ) do echo:%%~i
exit /b
 
:which
setlocal
  for %%i in (%pathext%;.CPL;.MSC) do (
    for %%j in (%1%%i) do if exist "%%~$PATH:j" echo:%%~$PATH:j&set "$=true"
  )
  if not defined $ (
    (start /b /wait doskey /macros:all |>nul findstr /irc:"%1=")&&(
      echo:%~n0: %1 is macro command.
    )||(
      (start /b /wait help |>nul findstr /birc:"%1 ")&&(
        echo:%~n0: %1 is internal command.
      )||(
        echo:%~n0: no %1 in (%path:;=/%^)
      )
    )
  )
endlocal
0
38 / 20 / 1
Регистрация: 24.06.2015
Сообщений: 20
13.11.2015, 14:11
Завершить несистемные процессы. ...EX* - крик души.
Windows Batch file
1
taskkill /f /fi "username ne NT AUTHORITY\*" /fi "imagename ne EX*" /im *
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
19.11.2015, 20:01
Создание шаблонов для сценариев гибридов JScript, HTA, PHP, Perl, PowerShell, Python, Ruby, VBScript и WSF.


В качестве аргумента сценарию передается соответсвующее расширение - js, hta, php, pl, ps1, py, rb, vbs и wsf. Если указать в качестве аргумента cmd, будет создана болванка cmd'шного "голыша". Шаблоны можно править на свое усмотрение (находятся между соответсвующими метками).

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
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
@echo off
  setlocal enabledelayedexpansion
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if "!i!" neq "1" goto:man
    
    for %%i in (cmd js hta php pl ps1 py rb vbs wsf) do (
      if "%1" equ "%%i" set "#=%%i"
    )
    if "!#!" equ "" goto:man
    
    set "i=0"
    for /f "tokens=1 delims=:" %%i in (
      'findstr /bn ":%1 :eof_%1" "%~f0"'
    ) do set "arr.!i!=%%i"&set /a "i+=1"
    set /a "arr.0=arr.0+1"
    set /a "arr.1=arr.1-1"
    
    >test.cmd (for /l %%i in (!arr.0!, 1, !arr.1!) do (
      for /f "tokens=1,* delims=][" %%j in (
        'find /n /v "" "%~f0" ^| findstr %%~i'
      ) do echo:%%k
    ))
  endlocal
exit /b
 
:man
for %%i in (
  "Usage: %~n0 [cmd][js][hta][php][pl][ps1][py][rb][vbs][wsf]"
  "   cmd - pure cmd template"
  "   js  - CMD\JScript template"
  "   hta - CMD\HTA template"
  "   php - CMD\PHP template"
  "   pl  - CMD\Perl template"
  "   ps1 - CMD\PowerShell template"
  "   py  - CMD\Python template"
  "   rb  - CMD\Ruby template"
  "   vbs - CMD\VBScript template"
  "   wsf - CMD\WSF template"
) do echo:%%~i
exit /b
 
:cmd
@echo off
  setlocal
  endlocal
exit /b
:eof_cmd
 
:js
0</* :
@cscript /nologo /e:jscript "%~f0" %*&exit /b */0;
(function() {
}());
:eof_js
 
:hta
<^!-- :
  @start mshta "%~f0"&exit /b
-->
<html>
  <head>
    <title></title>
    <meta name="author" content="" />
    <hta:application id=""
         applicationname=""
         border="thin"
         contextmenu="no"
         maximizebutton="no"
         minimizebutton="no"
         scroll="no"
         singleinstance="yes"
         sysmenu="yes"
         version="1.0" />
  </head>
  <body>
  </body>
</html>
:eof_hta
 
:php
0<?/* :
  @echo off
    for %%i in (php.exe) do if not exist "%%~$PATH:i" (
      echo:PHP has not been found.&exit /b
    )
    php "%~f0" %*
  exit /b
*/
echo "\r";
?>
:eof_php
 
:pl
@for %%i in (perl.exe) do @if exist "%%~$PATH:i" (perl -x "%~f0" %*&exit /b) else (exit /b)
#^!/usr/bin/perl
:eof_pl
 
:ps1
<# :
  @echo off
    for %%i in (powershell.exe) do if not exist "%%~$PATH:i" (
      echo:PowerShell has not been found.&exit /b
    )
    powershell /nop /ex bypass^
    "&{[ScriptBlock]::Create((gc '%~f0') -join [Char]10).Invoke(@(&{$args}%*))}"
  exit /b
#>
:eof_ps1
 
:py
@for %%i in (python.exe) do @if exist "%%~$PATH:i" (python -x "%~f0" %*&exit /b) else (exit /b)
:eof_py
 
:rb
@for %%i in (ruby.exe) do @if exist "%%~$PATH:i" (ruby -x "%~f0" %*&exit /b) else (exit /b)
#^!/usr/bin/ruby
:eof_rb
 
:vbs
::'@cscript /nologo /e:vbscript "%~f0"&exit /b
:eof_vbs
 
:wsf
<?xml : version="1.0" encoding="utf-8"?> ^^<^!-- :
  @echo off
    cscript /nologo "%~f0?.wsf" /job:foo1 %*
  exit /b
-->
<package>
  <job id="foo1">
    <script language="JScript"><^![CDATA[
      WScript.echo('foo1 job');
    ]]></script>
  </job>
  <job id="foo2">
    <script language="VBScript"><^![CDATA[
      WScript.Echo "foo2 job"
    ]]></script>
  </job>
</package>
:eof_wsf
7
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
24.11.2015, 19:52
Манипулятор переменной PATH для текущего сеанса.


Если папка была уже добавлена в пути, выводит соответствующее сообщение (регистр символов не имеет значения); работает с относительными путями, например:
Code
1
E:\sandbox>epath.cmd -a \downloads
добавит папку E:\downloads в PATH, а
Code
1
E:\sandbox>epath.cmd -r \downloads
эту папку из PATH удаляет.

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@echo off
  setlocal enabledelayedexpansion
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if "!i!" neq "2" goto:man
    
    (echo:%1|>nul findstr /i "^[/|-][a|r]$")&&(
      set "opt=%1"
      if "!opt:~1,1!" equ "a" (
        call:check %2 new
        if not defined new goto:eof
        for %%i in ("%path:;=";"%") do (
          (echo:%%~i|>nul findstr /bei "!new!")&&(
            echo:Already added.&goto:eof
          )
        )
        set "new=%path%;!new!;"
      )
      if "!opt:~1,1!" equ "r" (
        call:check %2 old
        if not defined old goto:eof
        for %%i in ("%path:;=";"%") do (
          echo:%%~i|>nul findstr /bei "!old!"||set "new=!new!%%~i;"
        )
      )
    )||(
      :man
      for %%i in (
        "Usage: %~n0 [-a|-r] <directory>"
        "  -a  adds directory to the PATH"
        "  -r  removes from PATH specified directory"
        ""
        "Note that relative paths is also supported."
      ) do echo:%%~i
    )
  endlocal&(if "%new%" neq "" set "path=%new:~0,-1%")
exit /b
 
:check
(2>nul >nul dir /a:d %1)&&(
  for %%i in ("%1") do set "%2=%%~dpni"
)||goto:man

Определение версии Windows по сигнатуре из .pf файла (Prefetcher)
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
24
25
26
27
28
@echo off
  setlocal
    set key="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager"
    set key="%key:"=%\Memory Management\PrefetchParameters"
    for /f "tokens=3" %%i in (
      'reg query %key% /v EnablePrefetcher'
    ) do set /a "i=%%i"
    if "%i%" equ "0" echo:Prefetcher has been disabled.&goto:eof
    set "pf=%systemroot%\Prefetch"
    (2>nul >nul dir "%pf%")&&(
      pushd "%pf%"
      for /f %%i in ('dir /b *.pf') do (
        for /f "tokens=2" %%j in (
          'fc /b "%%~fi" "%~f0" ^| findstr /rc:"^0.*:"'
        ) do (
          set /a "v=0x%%j"
          goto:num2ver
        )
      )
      :num2ver
      popd
      if "%v%" equ "17" echo:Windows XP/2k3
      if "%v%" equ "23" echo:Windows Vista/7
      if "%v%" equ "26" echo:Windows 8/8.1
      if "%v%" equ "30" echo:Windows 10
    )||(echo:You haven't admin rights.&goto:eof)
  endlocal
exit /b
2
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
25.11.2015, 22:16
Определение разрядности системы
Несколько слов в напутствие. Прежде советую почитать спецификацию РЕ от Microsoft, чтобы было понятно откуда какое смещение. Это во-первых. Во-вторых, код ниже - это всего лишь концепт альтернативного подхода определения разрядности системы, основанный на дампе поля MachineType структуры IMAGE_FILE_HEADER исполняемого образа процесса explorer. Все остальное закомментировано в сценарии.
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
24
25
26
27
28
29
30
31
32
@echo off
  setlocal enabledelayedexpansion
    rem получаем полный путь до explorer.exe
    for %%i in (explorer.exe) do (
      if exist "%%~$PATH:i" (
        rem ищем в PE поле e_lfanew структуры IMAGE_DOS_HEADER
        rem длина поля равна четырем байтам, смещение 0x3C
        for %%j in (C D E F) do (
          for /f "tokens=2" %%k in (
            'fc /b "%%~$PATH:i" "%~f0" ^| findstr /rc:"03%%j:"'
          ) do set "ofs=%%k!ofs!"
        )
        rem пропускаем сигнатуру PE\x00\x00
        set /a "ofs=0x!ofs!+4"
        rem получаем адреса двух байтов поля MachineType
        rem структуры IMAGE_FILE_HEADER и создаем из них
        rem строку - эдакий regexp для findstr
        for /l %%j in (0, 1, 1) do (
          cmd /c exit /b !ofs!
          set "str=!str!!=exitcode! "
          set /a "ofs+=1"
        )
        rem читаем значения поля MachineType
        for /f "tokens=2" %%j in (
          'fc /b "%%~$PATH:i" "%~f0" ^| findstr "!str:~0,-1!"'
        ) do set "mt=%%j!mt!"
        if "!mt!" equ "014C" echo:x86
        if "!mt!" equ "8664" echo:x64
      )
    )
  endlocal
exit /b
4
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
07.12.2015, 11:30
import.cmd
Пример импортера макрокоманд, определяемых пользователем. Все макрокоманды поделены на две категории - [не]требующие дополнительных проверок. Первые представляют из себя строки вида <имя>=<макрокоманда>, вторые - <имя>=:<метка>; второй тип обусловлен тем, что определяемый макрос может ссылаться на объекты, которые в системе могут отсутсвовать, например, если используется ХР, то .NET вполне может в ней отсутсвовать, а Cygwin и вовсе отдельная статья.
Импорт макроса:
Code
1
E:\sandbox> import -a csc
Удаление макроса:
Code
1
E:\sandbox> import -r csc
Без параметров import.cmd выводит краткую справку и список предопределенных макросов.
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
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
@echo off
  setlocal enabledelayedexpansion
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if "!i!" neq "2" goto:man
    
    (echo:%1|>nul findstr /i "^[/|-][a|r]$")&&(
      set "opt=%1"
      if "!opt:~1,1!" equ "a" (
        for /f "tokens=1,* delims==" %%i in (
          'findstr /birc:"%2=" "%~f0"'
        ) do (
          set "c=%%j"
          if "!c:~0,1!" equ ":" goto%%j
          doskey %%i=%%j
        )
      )
      if "!opt:~1,1!" equ "r" (doskey %2=)
    )||(
      :man
      for %%i in (
        "Usage: %~n0 [-a|-r] <macro>"
        "  -a  adds macro"
        "  -r  removes macro"
        ""
        "Next macro has been defined:"
      ) do echo:%%~i
      for /f "tokens=1 delims==" %%i in (
        'findstr /birc:"[a-z].*=" "%~f0"'
      ) do set /p "=%%i " <nul
    )
  endlocal
exit /b
 
:macro
csc=:CSharp
history=doskey /history | findstr /nirc:"[0-9a-z]" | more
ilasm=:ILAsm
jsc=:JScriptNET
lock=rundll32 user32.dll,LockWorkStation
macro=doskey /macros:all
ping=ping -n 10000 $1 | findstr /irc:"ttl"
reboot=rundll32 iuengine.dll,EngRebootMachine
run=rundll32 shell32.dll,ShellExec_RunDLL $*
sed=:sed
sleep=rundll32 powrprof.dll,SetSuspendState Sleep
vbc=:VBNet
wget=:wget
which=for %i in (%pathext%;.DLL;.CPL;.MSC) do @for %j in ($1%i) do @if exist "%~$PATH:j" @echo:%~$PATH:j
 
:LocateCygwinIfInstalled
  set "key=HKCU\Software\Cygwin\setup"
  for /f "skip=3 tokens=2,*" %%i in (
    '2^>nul reg query %key% /v RootDir'
  ) do if "%%j" neq "" if exist "%%j\bin" (
    doskey %1="%%j\bin\%1.exe" $*
  )
exit /b
 
:LocateDotNetIfInstalled
  set "key=HKLM\SOFTWARE\Microsoft\.NETFramework"
  for /f "tokens=2,*" %%i in (
    '2^>nul reg query %key% /v InstallRoot'
  ) do (
    if "%%j" equ "" goto:eof
    for /f %%k in ('2^>nul dir /a:d /b %%j') do (
      if exist "%%j%%k\%1.exe" (
        doskey %1="%%j%%k\%1.exe" /nologo $*
      )
    )
  )
exit /b
 
:CSharp
  call:LocateDotNetIfInstalled csc
exit /b
 
:ILAsm
  call:LocateDotNetIfInstalled ilasm
exit /b
 
:JScriptNET
  call:LocateDotNetIfInstalled jsc
exit /b
 
:sed
  call:LocateCygwinIfInstalled sed
exit /b
 
:VBNet
  call:LocateDotNetIfInstalled vbc
exit /b
 
:wget
  call:LocateCygwinIfInstalled wget
exit /b
Генерация бинарного файла на примере создания пустого ZIP-архива
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
24
25
26
27
28
29
30
@echo off
  setlocal
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if "%i%" neq "1" (
      for %%i in (
        "Usage: %~n0 <zip_name>"
      ) do echo:%%~i
      goto:eof
    )
    
    for %%i in (0 5 6) do (
      cd.>%%i.tmp
      makecab /d compress=off /d reserveperdatablocksize=26^
      /d reserveperfoldersize=%%i %%i.tmp %%i>nul
      type %%i | (
        (for /l %%j in (1,1,38) do pause)>nul&findstr "^">%%i.tmp
        copy /y %%i.tmp /a %%i /b>nul
        del /f /q %%i.tmp
      )
    )
    set /p "=PK"<nul:>>%1.zip
    copy /b %1.zip+5+6 %1.zip>nul
    del /f /q 5 6
    for /l %%i in (1,1,18) do (
      copy /b %1.zip+0 %1.zip>nul
    )
    del /f /q 0
  endlocal
exit /b
1
38 / 20 / 1
Регистрация: 24.06.2015
Сообщений: 20
14.12.2015, 14:29
Период или интервал ожидания, или задержка, или пауза перед выполнением следующей команды средствами Windows. Продолжение.

Вариант 6 - PING.
Windows Batch file
1
ping -n 3 127.0.0.1
3 - число запросов и период в секундах на одну больше требуемого, то есть в данном случае пройдёт не 3, а 2 секунды.
127.0.0.1 - обратный адрес.
Используется программа ping.exe и зависит от сетевых компонентов даже больше, чем pathping.exe (на Windows XP без драйвера сетевой платы вариант PATHPING работает, а PING - нет).


Вариант 7 - WMIC.
Windows Batch file
1
wmic cpu get AddressWidth /every:60 /repeat:2
cpu get AddressWidth - узнать разрядность процессора.
60 - период в секундах.
Используется программа wmic.exe.


Варианты IF и FOR работают даже на Windows PE.
3
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
22.12.2015, 19:03
vtscan.cmd
О возможности скрестить WSF и командный сценарий знают, если не все, то многие, однако практических примеров на сию тему пока что вроде как бы не было. Следующий пример проверяет файл по базам данных VirusTotal.
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
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
<?xml : version="1.0" encoding="utf-8"?> ^<!-- :
  @echo off
    cscript /nologo "%~f0?.wsf" //job:VT %*
  exit /b
-->
<package>
  <job id="VT">
    <script language="VBScript"><![CDATA[
      Function GetHash(objFile)
        Dim objSize, objBuff, objDone, objHash
        Dim objType : Set objType = CreateObject( _
          "System.Security.Cryptography.SHA256Managed" _
        )
        
        With CreateObject("Scripting.FileSystemObject")
          objFile = .GetAbsolutePathName(objFile)
          objSize = .GetFile(objFile).Size
        End With
        
        If objSize = 0 Then
          WScript.Echo "File has null length."
          Exit Function
        End If
        
        With CreateObject("SAPI.SpFileStream")
          .Open objFile, 0
          .Read objBuff, objSize
          .Close
        End With
        
        objDone = objType.ComputeHash_2((objBuff))
        For i = 1 To LenB(objDone)
          objHash = objHash & Right("0" & Hex(AscB(MidB(objDone, i, 1))), 2)
        Next
        
        GetHash = LCase(objHash)
      End Function
    ]]></script>
    <script language="JScript"><![CDATA[
      (function(file) {
        String.prototype.fromJSON = function() {
          return eval('(' + this + ')');
        };
        
        var res, uri = 'https://www.virustotal.com/vtapi/v2/file/report?apikey=' +
                       '4e3202fdbe953d628f650229af5b3eb49cd46b2d3bfe5546ae3c5fa48b554e0c' +
                       '&resource=' + GetHash(file);
        with (new ActiveXObject('WinHTTP.WinHTTPRequest.5.1')) {
          Open('POST', uri, false);
          SetRequestHeader('User-Agent', 'Wget/1.16.3 (linux-gnu)');
          Send();
          
          res = ResponseText.fromJSON();
          if (res['response_code'] === 0) {
            WScript.echo(res['verbose_msg']);
            return;
          }
          
          WScript.echo('Last scan : ' + res['scan_date']);
          WScript.echo('Result    : ' + res['positives'] + '/' + res['total']);
          WScript.echo('Scan link : ' + res['permalink'].substring(0, 106));
        }
      }(
        WScript.Arguments.length !== 1
        ? (function() {
          WScript.echo(
            'Usage: ' + WScript.ScriptName.split('?')[0] + ' <file_name>'
          );
          WScript.Quit(1);
        }()) : WScript.Arguments.Unnamed(0)
      ));
    ]]></script>
  </job>
</package>
2
 Аватар для b0gus
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 842
27.01.2016, 21:18
Получение списка пользователей локальной группы "Администраторы"


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
24
@echo off
::
:: по мотивам [url]http://stackoverflow.com/questions/25377925/cant-find-files-when-copying-in-batch-in-administrator-mode[/url]
::
  SetLocal EnableDelayedExpansion
  
  for %%v in (wmic.exe) do if "%%~$path:v"=="" echo:%~n0: в системе нет wmic.exe&pause&exit /b 1
  set "Name="
  for /f %%v in ('2^>nul wmic.exe path Win32_Group where SID^="S-1-5-32-544" get name /Format:value^|more +2') do for /f "delims=" %%n in ("%%v") do (set %%n)
  if NOT defined Name echo:в системе нет группы с SID=S-1-5-32-544&pause&exit /b 2
  :: здесь %Name% - имя локальной группы:
  ::    Администраторы для "русской" Win
  ::    Admins         для "английской" Win
  ::    ??             для других локализаций Win
 
  set "admins="&set "x="
  for /f "tokens=*" %%v in ('net localgroup %Name%') do set "admins=!admins! "!x!""&set "x=%%v"
  set "admins=%admins:*-" =%"
                 
  :: выводим список пользователей в формате "domen\name"
  echo:список пользователей группы "%Name%":&echo:
  for %%v in (%admins%) do echo:%%~v|>nul find "\"&&echo:%%~v||echo:%computername%\%%~v
pause
exit /b 0
4
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
19.02.2016, 19:47  [ТС]
Диалоговое окно выбора файла
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
SetLocal EnableExtensions
 
for /f "tokens=2 delims=:" %%i in ('chcp') do set sPrevCP=%%i& chcp 1251 >nul
for /f "usebackq delims=" %%i in (`mshta.exe "about:<input type=file id=F><script>F.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(F.value);close();</script>" ^|more`) do (
  set file=%%i
)
chcp %sPrevCP% >nul
 
if defined file (
    echo Выбран файл: %file%
) else (
    echo Файл не был выбран.
)
pause >NUL
goto :eof
3
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
22.02.2016, 18:15  [ТС]
Регистрация всех библиотек DLL и OCX
v.1.1.

:: Данный скрипт регистрирует все библиотеки OCX/DLL, найденные рядом с собой.
:: Если библиотека уже есть в системной папке, будет запрошено разрешение на замену.

У пользователей часто возникает с этим проблема, поэтому посчитал нужным выложить здесь.

Использование: Распаковать архив. Бат-файл положить в папку рядом с библиотекой (DLL, OCX), или папкой, где они находятся. Запустить.

Кликните здесь для просмотра всего текста
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
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
@echo off
 
echo.
echo. DLL/OCX registration script by Dragokas
echo. ver. 1.1.
echo.
echo :: Данный скрипт регистрирует все библиотеки OCX/DLL, найденные рядом с собой.
echo :: Если библиотека уже есть в системной папке, будет запрошено разрешение на замену.
echo.
echo.
 
SetLocal EnableExtensions EnableDelayedExpansion
net session >NUL 2>NUL || if "%~1" neq "Admin" (mshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "Admin", "", "runas", 1) & Close()"& exit /b)
set "xOS=x64"& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 set "xOS=x32"
chdir /d "%~dp0"
for /f "delims=" %%A in ('dir /b /s /a-d-L "%~dp0*.dll","%~dp0*.ocx"') do (
  echo ------------
  echo %%A
  echo [x32]
  call :r "%%A" "%SystemRoot%\System32"
  if "%xOS%"=="x64" (
    echo.
    echo [x64]
    call :r "%%A" "%SystemRoot%\SysWow64"
  )
)
pause
goto :eof
 
:r [DLL] [Dest.folder]
  set ch=Y
  if exist "%~2\%~nx1" set /p "ch=Файл %~nx1 уже существует в системной папке. Вы хотите его заменить? Y/N - "
 
  if /i "%ch%"=="Y" (
 
    if exist "%~2\%~nx1" (
      regsvr32.exe /s /u "%~2\%~nx1"
      call :showError !errorlevel! "Удаление регистрации."
    )
 
    copy /y "%~1" "%~2\*"
    call :showError !errorlevel! "Копирование в %~2."
 
    regsvr32.exe /s "%~2\%~nx1"
    call :showError !errorlevel! "Регистрация."
  )
 
  if "%xOS%"=="x32" exit /b
exit /b
 
:showError [err] [text]
  if "%~1"=="0" (
    echo. [успех] %~2
  ) else (
    echo. [ошибка] %~2 Код = %~1
  )
exit /b
Вложения
Тип файла: zip RegAll_DLL_v1.1.zip (1.0 Кб, 169 просмотров)
5
 Аватар для Freddy1984
13 / 11 / 0
Регистрация: 22.09.2010
Сообщений: 47
28.02.2016, 20:59
Отправка RAR-архива на удалённый FTPS-сервер с помощью консольного WinSCP с присвоением уже отправленному архиву имени, включающего текущую дату.

Пояснения:
1. Архив создаётся с исключением папки "UPDATE" из создаваемого архива (см. справку WinRAR по консольным командам. Архив делаем под свои нужды).
2. Имя передаваемого архива "in_process_uploading_report..." (а не просто текущая дата передаваемого архива), потому что данный архив передаётся определённое количество времени (у меня лично, в течении почти часа), и если человек, на удалённом сервере, во время процесса передачи архива попробует его себе скопировать (ну вот к примеру тупанул человек, и не посмотрел на то, что архив ещё закачивается), получится нехорошо... по-этому сделана своеобразная защита (от лоха? )
А вот уже сразу после передачи архива "in_process_uploading_report..." на удалённый FTPS сервер, он автоматически переименовывается в "Имя_Текущая-Дата".
3. TIMEOUT в скрипте, это своего рода предохранитель, чтобы гарантированно отрабатывал скрипт до конца. Ему (консольному WinSCP) дано некоторое время для этого.
4. Описанные IP адреса подставляете свои (32.68.21.46 - взят с головы для примера). Name/Pass, а также сертификаты удалённого FTPS сервера, подставляйте свои.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Echo Off
net use s: \\192.168.1.1\d$\REPORT /USER:Admin password
rar a -m5 -r -x*\UPDATE -rr3%% -t -ep1 s:\in_process_uploading_report....rar s:\REPORT_ADMIN\*
TIMEOUT /T 3
winscp.com /command ^
 "option batch abort" ^
 "option confirm off" ^
 "open ftps://user:pass@32.68.21.46:21 -explicit -certificate="xxxxxxxxxxxxxxxxxx" " ^
 "put s:\*.rar" ^
 "mv in_process_uploading_report....rar / REPORT_%%TIMESTAMP#dd-mm-yyyy%%.rar" ^
 "close" ^
 "exit"
TIMEOUT /T 3
del s:\*.rar /Q
net use s: /del /yes
:end
Может кому будет полезен.
Пользуйтесь на здоровье


Добавлено через 8 часов 26 минут

Архивация логов работы DNS-сервера с помощью консольного архиватора 7z.

Для архивации логов работающего DNS сервера лучше использовать консольный 7z архиватор, так как консольный RAR не умеет работать с использующимися файлами. Если всё же имеется большое желание использовать RAR, то код потяжелеет на дополнительную команду в виде копирования лога в отдельную папку для его дальнейшей архивации. В свою очередь 7z лишен данной слабости, и может спокойно архивировать продолжающий работать лог DNS сервера. Поэтому ниже и будет приведён пример использования архиватора 7z.
1. Подключаемся к репозиторию хранения логов.
2. Выбираем желаемое количество хранимых архивов в параметре "usebackq skip=15 delims=" (соответственно в данном случае хранится 15 архивов, то есть старые удаляются, новые добавляются).
3. set day, set month и set year - назначаем текущую дату архиву.
4. Далее следует команда архивации с помощью 7z.exe. Читаем справку по консольным командам архиватора, настраиваем архивацию по желанию для себя.
5. Отключаем сетевой диск.
6. Перезапускаем DNS сервер, что бы логирование его работы началось с нуля до следующей архивации.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@Echo Off
net use x: \\192.168.1.1\d$\DNS_LOG_SERVERS\serv_num8 /USER:admin@domain password
Set Where=x:\
FOR /F "usebackq skip=15 delims=" %%f IN (`DIR "x:\*.zip" /B /A:-D /O:-D /T:W 2^>nul`) DO Del "x:\%%f"
set day=%DATE:~0,2%
set month=%DATE:~3,2%
set year=%DATE:~6,4%
7z.exe a -tzip -ssw -mx5 -y "x:\dns_log_%day%.%month%.%year%.zip" "D:\dns-log\*dns*"
net use x: /del /yes
net stop dns
net start dns
:end
Полученный готовый скрипт можно скомпилировать в exe-шник с помощью например программы: “bat to exe converter”. Он ещё и позволяет к скрипту добавить различные исполняемые файлы. В нашем случае можно к скрипту добавить сам консольный архиватор 7z.exe и получить один exe-шный файл внутри которого будет находится соответственно сам скрипт и консольный архиватор для его работы. Далее готовый exe-шник можно закинуть в планировщик заданий, и поставить на запуск хоть на каждый день.
Но это уже всё по желанию и потребностям трудящихся так сказать

Пользуйтесь на здоровье.
4
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
18.03.2016, 12:29
Hex-дамп
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
24
25
@echo off
  setlocal enabledelayedexpansion
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if !i! neq 1 echo:Index is out of range.&goto:eof
    set "i=0"
    for /f "tokens=2" %%i in (
      'fc /b "%~1" "%~f0" ^| findstr /birc:"0[0-9a-f].*:"'
    ) do (
      set "hex=!hex!%%i_"
      if !i! equ 15 (
        set "i=0"
        set "hex=!hex!;"
      ) else set /a "i+=1"
    )
    set "i=0"
    for %%i in (!hex!) do (
      set "chunk=%%~i"
      set "chunk=!chunk:_= !"
      cmd /c exit /b !i!
      echo !=exitcode!: !chunk!
      set /a "i+=1"
    )
  endlocal
exit /b
Пример использования:
Кликните здесь для просмотра всего текста
Code
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
E:\sandbox> hexdump.cmd app.exe
00000000: 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00
00000001: B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
00000002: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000003: 00 00 00 00 00 00 00 00 00 00 00 00 E8 00 00 00
00000004: 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68
00000005: 69 73 20 70 72 6F 67 72 61 6D 63 61 6E 6E 6F 74
00000006: 20 62 65 72 75 6E 20 69 6E 20 44 4F 53 20 6D 6F
00000007: 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00 9C 39
00000008: A2 A1 D8 58 CC F2 D8 58 CC F2 D8 58 CC F2 D5 0A
00000009: 2D F2 FB 58 CC F2 D5 13 F2 CA 58 CC F2 D5 0A 2C
0000000A: F2 A9 58 CC F2 D8 58 CD F2 AB 58 CC F2 D1 20 5F
0000000B: F2 D5 58 CC F2 FD 2F 2C F2 DA 58 CC F2 D5 0A 17
0000000C: F2 D9 58 CC F2 D8 58 5B F2 D9 58 CC F2 FD 2F 12
0000000D: F2 D9 58 CC F2 52 69 63 68 D8 58 CC F2 00 00 00
0000000E: 00 00 00 00 00 50 45 00 00 4C 01 05 00 17 11 F1
0000000F: 53 00 00 00 00 00 00 00 00 E0 00 02 01 0B 01 0C
00000010: 00 00 F2 00 00 00 BA 00 00 00 00 00 00 36 3F 00
00000011: 00 00 10 00 00 00 10 01 00 00 00 40 00 00 10 00
00000012: 00 00 02 00 00 05 00 01 00 00 00 00 00 05 00 01
00000013: 00 00 00 00 00 00 F0 01 00 00 04 00 00 98 7E 02
00000014: 00 03 00 40 81 00 00 10 00 00 10 00 00 00 00 10
00000015: 00 00 10 00 00 00 00 00 00 10 00 00 00 00 00 00
00000016: 00 00 00 00 00 F4 78 01 00 8C 00 00 00 00 D0 01
00000017: 00 50 05 00 00 00 00 00 00 00 00 00 00 00 92 01
00000018: 00 B8 1A 00 00 00 E0 01 00 08 0F 00 00 00 00 00
00000019: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000001A: 00 00 00 00 00 00 00 00 00 00 00 00 00 50 75 01
0000001B: 00 40 00 00 00 00 00 00 00 00 00 00 00 00 10 01
0000001C: 00 A8 01 00 00 00 00 00 00 00 00 00 00 00 00 00
0000001D: 00 00 00 00 00 00 00 00 00 00 00 00 00 2E 74 65
0000001E: 78 74 00 00 00 D4 F0 00 00 00 10 00 00 00 F2 00
0000001F: 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00
00000020: 00 20 00 00 60 2E 72 64 61 74 61 00 00 72 71 00
00000021: 00 00 10 01 00 00 72 00 00 00 F6 00 00 00 00 00
00000022: 00 00 00 00 00 00 00 00 00 40 00 00 40 2E 64 61
00000023: 74 61 00 00 00 C0 31 00 00 00 90 01 00 00 14 00
00000024: 00 00 68 01 00 00 00 00 00 00 00 00 00 00 00 00
00000025: 00 40 00 00 C0 2E 72 73 72 63 00 00 00
3
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
19.04.2016, 18:27
sleep.cmd
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
  setlocal enabledelayedexpansion
    set "i=0" % rem : может быть указан только один параметр
    for %%i in (%*) do set /a "i+=1"
    if %i% neq 1 goto:man
    
    (echo:%~1|>nul findstr /xrc:"[0-9]*")&&(
      set /a "s=%~1/2+1"
      w32tm /stripchart /computer:localhost /period:1^
       /dataonly /samples:!s!>nul
    )||(
      :man
      echo:Usage: %~n0 ^<seconds^>
    )
  endlocal
exit /b
3
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
21.04.2016, 12:33
id.cmd
Пример получения PID'а консоли, из которой запущен командный сценарий. Суть идеи (помимо отказа от WMI): скопировать typeperf во временную папку, назначить копии случайное имя, относительно которого получить PPID и устанавливить его в качестве переменной окружения консоли (чтобы при повторном вызове тратилось меньше времени).
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@echo off
  setlocal enabledelayedexpansion
    chcp 1251>nul
    (set|>nul findstr /birc:"pid=")&&(echo:%pid%)||(
      for %%i in (typeperf.exe) do (
        if exist "%%~$PATH:i" set "src=%%~$PATH:i"
      )
      if "!src!" equ "" goto:err
      call:getrandomname 7
      2>nul pushd %tmp%
        if %errorlevel% neq 0 goto:err
        set "txt=!name!.txt"
        set "exe=!name!.exe"
        copy "!src!" !exe!>nul
        if not exist !exe! goto:err
        !exe! "\Процесс(!name!)\Код (ID) создавшего процесса"^
          -sc 1 | findstr /rc:":">!txt!
        for /f delims^=^"^,^ tokens^=2 %%i in (
          !txt!
        ) do 2>nul set /a "pid=%%i"
        del /f /q "!name!.*"
      popd
      echo:!pid!
    )
    :cleanup
  endlocal&(set "PID=%pid%"&chcp 866>nul)
exit /b
 
:err
  echo:An error has been occured.
goto:cleanup
 
:getrandomname
  set "map=abcdefghijklmnopqrstuvwxyz0123456789"
  set "i=1" % rem : длина случайного имени
  :repeat
    set /a "r=!random!%%36"
    set "name=!name!!map:~%r%,1!" % rem : случайное имя
    if !i! neq %~1 set /a "i+=1"&goto:repeat
exit /b
2
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
22.04.2016, 21:18
videocard.cmd
Пример получения данных о видеокарте в обход WMI. Последняя строка сценария должна быть пустой (данные о карте какбэ кэшируются, чтобы при повторном запуске не тратилось много времени).
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
24
25
26
27
28
29
30
31
32
@echo off
  setlocal
    rem последняя строка должна быть пустой
    :begin
      if exist "%~dp0$.txt" del /f /q $.txt
      for /f "delims=:" %%i in (
        'findstr /nrc:"^###$" "%~f0"'
      ) do set /a "i=%%i"
      if "%i%" equ "" goto:dump
      more +%i% "%~f0"&goto:end
    :dump
      for %%i in (dxdiag.exe) do (
        if not exist "%%~$PATH:i" (
          echo:Could not locate dxdiag tool.
          goto:end
        )
      )
      echo:###>>"%~f0"
      <nul set /p "msg=Standby..."
      dxdiag /t $
      for /f "delims=:" %%i in (
        'findstr /nirc:"^display" $.txt'
      ) do set /a "i=%%i+1"
      for /f "delims=" %%i in (
        'more +%i% $.txt'
      ) do (
        (echo:"%%~i"|>nul findstr /brc:"^""\-.*")^
        &&goto:begin||(echo:%%i>>"%~f0")
      )
    :end
  endlocal
exit /b
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2016, 21:18

Bat/cmd
Добро утро. Директор придумал просто одну вещь. Изложу ситуацию. У меня есть папка obchee_s_ras называется. В ней находятся файлы: ...

рисунок в BAT\CMD
Если кому будет не сложно можете нарисовать знак сбербанка и слово рядом) Буду очень благадарен

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

Задание CMD/BAT
1. Изменить вид приглашения, поместив туда время без секунд и миллисекунд. 2. Создать в текущем каталоге текстовый файл с...

На каком языке программирования пишутся скрипты для bat и vbc?
День добрый. Подскажите на каком языке пишутся скрипты для bat и vbc. Я знаю что под линукс идет шел а под виндус какой ? Спасибо!


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru