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

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

15.10.2012, 00:56. Просмотров 321218. Ответов 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
VoronezhTeam
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 3
25.01.2014, 23:59 61
Автоматический вход на почту mail.ru с помощью bat без набора логина и пароля на клавиатуре. написал простой бат-код. надоело вводить каждый раз длинные пароли и хранить их в в своей памяти, очень полезно, пароль к ящику mail.ru хранит батник после запуска помещается в буфер обмена на определённое вами время после окончания пароль ликвидируется создаём mailru.bat

Bash
1
2
3
4
5
6
7
8
9
10
11
12
@Echo off
color f7
::Интернет страница сайта ввода ваших данных. Вместо [email]my@mail.ru[/email] укажите свой ящик
start [url]https://m.mail.ru/login?email=my@mail.ru[/url]
msg * Enter Password
::Введите ваш пароль заменив PASS и сохраняя ковычки
<nul set /p x="PASS"| Clip
::Введите время хранения пароля в буфере обмена цифра 150 = 2мин 30сек
ping -n 150 127.0.0.1 > nul
msg * The clipboard is cleared
<nul set /p x=""| Clip
exit
Добавлено через 9 минут
Этот Код для любого сайта здесь логин и пароль помещаются по очереди в буфер обмена на 10 секунд
Bash
1
2
3
4
5
6
7
8
9
10
11
@Echo off
color f7
msg * Enter Login
<nul set /p x="LOGIN"| Clip
ping -n 10 127.0.0.1 > nul
msg * Enter Password
<nul set /p x="PASSWORD"| Clip
ping -n 10 127.0.0.1 > nul
msg * The clipboard is cleared
<nul set /p x=""| Clip
exit
0
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
13.02.2014, 22:57  [ТС] 62
IP Location Checker
Авторы: Dragokas & LAMM_-*-_VURDALAK
Описание:
- принимает IP или имя WEB-страницы
- выдает такую информацию:
  • IP-адрес
  • Страну, код страны
  • Город (RU, EN)
  • IP Range
  • вычисляет маску подсети (битовую и по октетам)
  • определяет Ваш IP-адрес (если ничего не ввести)
Лицензия: код не является свободно распространяемым. Перепубликация - только с разрешения автора.
Скрипт является частью программы LAMM-*-VURDALAK's banning tool.
Данные парсятся со страниц:
3
Миниатюры
Полезные BAT/CMD скрипты  
Вложения
Тип файла: zip BB_Full.zip (5.5 Кб, 226 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
13.02.2014, 23:08  [ТС] 63
Включение макросов в Microsoft Office 2000 - 2013
Автор скрипта: Dragokas
Версия: v.1.2 (13.02.2014)
Совместимость: Windows XP, Vista, Seven, 8. (x32, x64)
Office 2000, XP, 2003, 2007, 2010, 2013 (x32, x64).
  • Завершите все офисные приложения.
  • После запуска батника выберите цифру и нажмите ENTER:
1 - Запуск макросов без уведомления.
2 - Запуск макросов с разрешения пользователя.
3 - Запретить запуск неподписанных макросов (не уведомлять).

Рекомендуется выбирать 2.

Макросы включаются/отключаются одновременно во всех установленных приложениях:
- Word
- Excel
- OutLook
- Access
- PowerPoint
Содержимое батника

Код
@echo off
:: Macros Access Script by Alex Dragokas
echo.
echo Утилита включения макросов для MS Office 2003-2013
echo.
:ch_Security
echo Введите цифру и нажмите кнопку ENTER:
echo.
echo 1 - Запуск макросов без уведомления.
echo 2 - Запуск макросов с разрешения пользователя.
echo 3 - Запретить запуск неподписанных макросов (не уведомлять).
echo.
set ch=
set /p "ch=Ваш выбор: "
echo.
if "%ch%"=="1" set "MacrosLevel=1"
if "%ch%"=="2" set "MacrosLevel=2"
if "%ch%"=="3" set "MacrosLevel=3"
if "%ch%" neq "1" if "%ch%" neq "2" if "%ch%" neq "3" goto ch_Security
:ch_VBA
echo Хотите включить программный доступ к коду макроса?
echo.
echo 1 - Да. Разрешить.
echo 2 - Нет. Запретить.
echo.
set ch=
set /p "ch=Ваш выбор: "
echo.
if "%ch%"=="1" set "ProjectLevel=1"
if "%ch%"=="2" set "ProjectLevel=0"
if "%ch%" neq "1" if "%ch%" neq "2" goto ch_VBA

:: Проверяю, запущен ли хоть один из процессов MS Office
:Check
call :CheckRun || (echo.& echo НЕЛЬЗЯ продолжить. Сначала нужно завершить все офисные приложения.& echo.& pause & echo.& goto Check)

For %%k in (
  HKCU\Software\Microsoft\Office
  HKCU\Software\Wow6432Node\Microsoft\Office
) do (
  For /F "tokens=5 delims=\" %%a in ('reg query "%%k" 2^>NUL ^| findstr /R "^.*\\[0-9].*"') do (
    if "%%a" neq "8.0" (
      if "%%a"=="9.0"  (echo Обнаружен MS Office 2000 & call :EnumApps 2003 "%%a")
      if "%%a"=="10.0" (echo Обнаружен MS Office XP   & call :EnumApps 2003 "%%a")
      if "%%a"=="11.0" (echo Обнаружен MS Office 2003 & call :EnumApps 2003 "%%a")
      if "%%a"=="12.0" (echo Обнаружен MS Office 2007 & call :EnumApps 2007 "%%a")
      if "%%a"=="13.0" (echo Обнаружен MS Office 2010 & call :EnumApps 2007 "%%a")
      if "%%a"=="14.0" (echo Обнаружен MS Office 2010 & call :EnumApps 2007 "%%a")
      if "%%a"=="15.0" (echo Обнаружен MS Office 2013 & call :EnumApps 2007 "%%a")
      if not Defined isChanges (echo Обнаружена неизвестная версия MS Office & call :EnumApps 2007 "%%a")
      echo.
    )
  )
)
pause
exit /B

:EnumApps %1-mso.family %2-key.version
  Set "isChanges=true"
  For %%k in (
    HKCU\Software\Microsoft\Office\%~2
    HKCU\Software\Wow6432Node\Microsoft\Office\%~2
  ) do (
    For /F "tokens=6 delims=\" %%a in ('reg query "%%k" 2^>NUL') do (
      if /i "%%a"=="Word" call :ChangeSecurity "%~1" "%~2" "%%a"
      if /i "%%a"=="Excel" call :ChangeSecurity "%~1" "%~2" "%%a"
      if /i "%%a"=="PowerPoint" call :ChangeSecurity "%~1" "%~2" "%%a"
      if /i "%%a"=="Access" call :ChangeSecurity "%~1" "%~2" "%%a"
      if /i "%%a"=="Outlook" call :ChangeSecurity "%~1" "%~2" "%%a"
    )
  )
Exit /B

:ChangeSecurity %1-mso.family %2-key.version %3-Application
  echo %~3
  if "%~1"=="2003" reg add "HKCU\Software\Microsoft\Office\%~2\%~3\Security" /v Level /t REG_DWORD /d %MacrosLevel% /f
  if "%~1"=="2007" reg add "HKCU\Software\Microsoft\Office\%~2\%~3\Security" /v VBAWarnings /t REG_DWORD /d %MacrosLevel% /f
  if /i "%~3" neq "Outlook" if "%~2" neq "9.0" reg add "HKCU\Software\Microsoft\Office\%~2\%~3\Security" /v AccessVBOM /t REG_DWORD /d %ProjectLevel% /f
Exit /B

:CheckRun
  TASKLIST /FI "imagename eq winword.exe" | find /i "winword.exe" && exit /B 1
  TASKLIST /FI "imagename eq excel.exe" | find /i "excel.exe" && exit /B 1
  TASKLIST /FI "imagename eq powerpnt.exe" | find /i "powerpnt.exe" && exit /B 1
  TASKLIST /FI "imagename eq outlook.exe" | find /i "outlook.exe" && exit /B 1
  TASKLIST /FI "imagename eq msaccess.exe" | find /i "msaccess.exe" && exit /B 1
Exit /B 0

Включение макросов Office >= 2007 вручную.
Включение макросов Office <= 2003 вручную.
6
Вложения
Тип файла: zip Macros_on_off_2000_2003_2007_2010_2013.zip (1.4 Кб, 156 просмотров)
Charles Kludge
Клюг
7645 / 3160 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
02.04.2014, 17:26 64
Выдвинуть или убрать "подставку под кофе" лоток CD-ROM'a.

DragokasНу тогда и мое пусть будет. Че уж. Батник все-таки ))
2
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
07.05.2014, 23:53  [ТС] 65
Закрытие всех окон командной строки, кроме текущего

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@echo off
SetLocal EnableExtensions
 
pause
call :CloseAllCMD
pause
exit /B
 
:CloseAllCMD { void }
  :: Функция закрытия всех окон командной строки, кроме текущего
  call :GetCurrentProcessID CurPID
  SetLocal EnableDelayedExpansion
  if "%CurPID%" neq "" (
    set cmd_c=0
    For /F "tokens=1,2 delims=," %%A in ('tasklist /FI "imagename EQ cmd.exe" /FO:CSV /NH') do (
      if "%%~B" neq "%CurPID%" (
        set /a cmd_c+=1
        set cmd.!cmd_c!=%%~B
    ))
    For /L %%C in (1 1 !cmd_c!) do taskkill /F /PID !cmd.%%C! >NUL 2>NUL
  )
  EndLocal
Exit /B
 
:GetCurrentProcessID [_out_Буфер для хранения PID текущего процесса]
  :: Функция получения PID текущего процесса командной строки
  SetLocal EnableDelayedExpansion
  for /f "tokens=2 delims=," %%a in ('tasklist /fo csv /nh ^| find /i "cmd.exe"') do set "curPID=!x!"& set "x=%%~a"
EndLocal & set "%~1=%curPID%" & Exit /B
Добавлено через 2 минуты
В принципе можно написать было все в одну строку, но так выглядит как-то более безопасно.
1
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
18.05.2014, 19:27  [ТС] 66
RakhniDecryptor Benchmark

Подсчитывает производительность процессора на основе реальной задачи -
дешифровка файла с помощью утилиты Kaspersky RakhniDecryptor.

В скрипте реализован:

- Автозапуск
- Динамическое отображения лога работы
- Подсчет средней скорости перебора паролей

Выкладываем оценки своих CPU в теме: Считаем количество попугаев на своих Киберлошадях
0
Вложения
Тип файла: rar RakhniDecryptor Benchmark.rar (37.6 Кб, 46 просмотров)
lorents
33 / 6 / 0
Регистрация: 18.05.2014
Сообщений: 121
18.05.2014, 21:16 67
Image Catalyst - программа для комплексной оптимизации/сжатии PNG и JPEG без потери качества в рамках того же формата. Отличительная особенность - реализована поддержка многопоточность.
Код
"Image Catalyst.bat" папка/изображение
0
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
19.05.2014, 21:25  [ТС] 68
RegSystemLibraries - восстановление регистрации библиотек ver. 1.1.

Совместимость: x32 и x64-разрядные Windows XP, Vista, Windows 7 / 8 / 8.1

Описание
При наличии неустраняемых проблем в работе операционной системы
(например, таких как окна ошибок со ссылками на файлы DLL, OCX)
рекомендуется провести повторную регистрацию библиотек.

Рекомендуемые действия, которые желательно выполнить перед запуском скрипта:

- сканирование ПК с помощью антивирусного сканера с обновленными базами
с загрузочного диска или флеш-накопителя (либо лечение в специализированном разделе);
- выполнение проверки системного диска на ошибки;
- выполнение проверки целостности и восстановления системных файлов;
- перезагрузка системы.

Порядок запуска скрипта:
- временно выгрузите антивирусные средства защиты;
- скачайте и распакуйте архив RegSystemLibraries;
- запустите скрипт правой кнопкой мыши "от имени администратора".

Как работает?
Скрипт выполняет повторную регистрацию библиотек с помощью сервера регистрации regsvr32.
Обрабатываются файлы *.dll, *.ocx, *.tlb в следующих папках:
- %SystemRoot%\System32\wbem
- %SystemRoot%\System32

Сравнение со схожим функционалом других утилит:
В отличие от пункта 3 утилиты Windows Repair All-in-one
скрипт игнорирует ошибки и зависания при регистрации библиотек.
Утилита имеет меню настройки с предустановленными:
- таймаутом принудительного завершения процесса регистрации;
- максимальным кол-вом одновременно регистрируемых библиотек.
4
Миниатюры
Полезные BAT/CMD скрипты  
Вложения
Тип файла: zip RegSystemLibraries.zip (2.9 Кб, 94 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
08.06.2014, 00:35  [ТС] 69
Быстрая сортировка (Чарльз Хоару)
(порт хорошо известного метода сортировки чисел через рекурсию)

Кликните здесь для просмотра всего текста
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
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
:: Зададим кол-во случайных чисел
set Count=1000
:: Минимальное и максимальное числа
set min=-100
set max=+100
 
:: Генерируем числа
for /L %%C in (1 1 %Count%) do set /a ar[%%C]=!random!%%(%max%-%min%+1)+%min%
 
echo До:
call :PrintArray ar 1 %Count%
echo.
set t0=%time%
:: Сортировка
call :qSort ar 1 %Count%
set t1=%time%
echo.
echo После:
call :PrintArray ar 1 %Count%
echo.
call :difftime
echo.
pause
exit /B
 
 
:qSort [arrayName] [lowBound] [upBound]
  :: port of Charles Hoar QuickSort
  :: maded by Alex Dragokas
  set i=%2
  set L=%3
  set /a M=(%i%+%L%)/2
  set M=!%1[%M%]!
  :_qSort_m0
  if %i% GTR %L% goto _qSort_m1
  :_qSort_m2
  if !%1[%i%]! GEQ %M% (goto _qSort_m3) else (set /a i+=1& goto _qSort_m2)
  :_qSort_m3
  if !%1[%L%]! LEQ %M% (goto _qSort_m4) else (set /a L-=1& goto _qSort_m3)
  :_qSort_m4
  if %i% GTR %L% goto _qSort_m5
  set wsp=!%1[%i%]!
  set %1[%i%]=!%1[%L%]!
  set %1[%L%]=%wsp%
  set /a i+=1, L-=1
  :_qSort_m5
  goto _qSort_m0  
  :_qSort_m1
  if %2 LSS %L% call :qSort %1 %2 %L%
  if %i% LSS %3 call :qSort %1 %i% %3
exit /B
 
:PrintArray [arrayName] [lowBound] [upBound]
  For /L %%C in (%2 1 %3) do echo %1[%%C]=!%1[%%C]!
exit /B
 
:difftime
  for /F "tokens=1-8 delims=:.," %%a in ("!t0: =0!:!t1: =0!") do set /a "a=(((1%%e-1%%a)*60)+1%%f-1%%b)*6000+1%%g%%h-1%%c%%d, a+=(a>>31) & 8640000, a*=10"
  echo Затрачено: %a% мс.
goto :eof


На моей системе получилось, что скорость в большинстве зависит от кол-ва элементов:

Кол-во элементов: 100
Скорость: 960 мс.

Кол-во элементов: 200
Скорость: 2200 мс.

Кол-во элементов: 1000
Скорость: 14520 мс.
4
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
01.07.2014, 19:46  [ТС] 70
QuickSort [Версия einstein1969]

В отличие от моей, имеет линейную сложность расчетов.
Код ниже строит сравнительный график двух алгоритмов (моего и einstein1969).
Кликните здесь для просмотра всего текста
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
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
rem Use raster 8x8 font
 
:: Set a Max count of numbers
set MaxCount=1500
:: Minimal and maximal numbers
set min=-100
set max=+100
 
:: Generation of numbers
for /L %%C in (1 1 %MaxCount%) do (
  set /a "ar[%%C]=!random!%%(%max%-%min%+1)+%min%"
  set /a save[%%C]=!ar[%%C]!
)
 
call :graph
pause
 
set Count=100
 
for /L %%C in (1 1 %Count%) do set /a ar[%%C]=!save[%%C]!
 
echo Before:
call :PrintArray ar 1 %Count%
echo.
set t0=%time%
:: Sorting
call :qSortA ar 1 %Count%
set t1=%time%
echo.
echo After:
call :PrintArray ar 1 %Count%
echo.
call :difftime
set a0=!a!
echo.
 
for /L %%C in (1 1 %Count%) do set /a ar[%%C]=!save[%%C]!
 
echo Before:
call :PrintArray ar 1 %Count%
echo.
set t0=%time%
:: Sorting
call :qSortB ar 1 %Count%
set t1=%time%
echo.
echo After:
call :PrintArray ar 1 %Count%
echo.
call :difftime
echo.
echo Previuos-Elapsed: %a0% msec.
echo.
 
echo checking 1 ...
 
for /L %%C in (1 1 %Count%) do (
  set ar[%%C]=
  set /a ar1[%%C]=!save[%%C]!
  set /a ar2[%%C]=!save[%%C]!
)
call :qSortA ar1 1 %Count%
call :qSortB ar2 1 %Count%
 
echo checking 2 ...
 
for /L %%C in (1 1 %Count%) do if !ar1[%%C]! neq !ar2[%%C]! echo Error. ar1[%%C] neq ar2[%%C] = !ar1[%%C]! neq !ar2[%%C]!
 
exit /B
 
:graph
 
mode 123,70
 
set /a p=0, max=-9999, maxy=64, maxX=120, Top=MaxCount
 
for /L %%x in (0,1,!maxX!) do ( set /a "v=%%x %% 12" 
   if !v! equ 0 (set "L_=!L_!|" & set "Ls=!Ls!|") else (set "L_=!L_!-" & set "Ls=!Ls! ") )
 
For /L %%c in (50,150,%Top%) do (
 
  set /a p+=1
 
  for /L %%C in (1 1 %%c) do set ar[%%C]=!save[%%C]!
 
  For %%T in (A;B) do (
    set t0=!time!
    call :qSort%%T ar 1 %%c
    set t1=!time!
    call :difftime
    if !a! gtr !max! set /a max=a
 
    set  time[%%T][!p!]=!a!
    set count[%%T][!p!]=%%c
  )
 
  :: empty buffer
  For /L %%y in (0,1,!maxy!) do for /L %%x in (0,1,!maxX!) do if defined b[%%y][%%x] set b[%%y][%%x]=
 
  :: fill
  For %%T in (A;B) do for /L %%p in (1,1,!p!) do (
    set /a "x=count[%%T][%%p]*maxX/top, y=!maxy!-time[%%T][%%p]*!maxy!/max"
    set b[!y!][!x!]=%%T
  )
 
  ::draw
  cls
  echo max_time:!max!cs count=%%c #test=!p! top_count:!Top!
  For /L %%y in (0,1,!maxy!) do (
    set L=
    set V=1
    for /L %%x in (0,1,!maxX!) do if defined b[%%y][%%x] set V=0
    if !V! equ 1 (
       set /a "o=%%y %% 8"
       if !o! equ 0 (set L=!L_!) else set L=!Ls!
    ) else (
      for /L %%x in (0,1,!maxX!) do if defined b[%%y][%%x] (
          set "L=!L!!b[%%y][%%x]!"
        ) else (
          set /a "v=%%x %% 12" & if !v! equ 0 (set "L=!L!|"
            ) else (
              set /a "o=%%y %% 8"
              if !o! equ 0 (set "L=!L!-") else set "L=!L! "
            )
        )
    )
    echo( !L!
  )
)
exit /b
 
:qSortA [arrayName] [lowBound] [upBound]
  :: port of Charles Hoar QuickSort
  :: maded by Alex Dragokas
  set i=%2
  set L=%3
  set /a M=(%i%+%L%)/2
  set M=!%1[%M%]!
  :_qSort_m0
  if %i% GTR %L% goto _qSort_m1
  :_qSort_m2
  if !%1[%i%]! GEQ %M% (goto _qSort_m3) else (set /a i+=1& goto _qSort_m2)
  :_qSort_m3
  if !%1[%L%]! LEQ %M% (goto _qSort_m4) else (set /a L-=1& goto _qSort_m3)
  :_qSort_m4
  if %i% GTR %L% goto _qSort_m5
  set wsp=!%1[%i%]!
  set %1[%i%]=!%1[%L%]!
  set %1[%L%]=%wsp%
  set /a i+=1, L-=1
  :_qSort_m5
  goto _qSort_m0 
  :_qSort_m1
  if %2 LSS %L% call :qSortA %1 %2 %L%
  if %i% LSS %3 call :qSortA %1 %i% %3
exit /B
 
:: Quicksort by einstein1969
:qsortB
  set "sw1=%1[^!pi^!] ^^^^ %1[^!k^!]"
  set "sw2=%1[%%i] ^^^^ %1[^!a^!]"
  set "sw3=%1[^!a^!] ^^^^ %1[^!k^!]"
  set "s=0"
:qsort2_ric
     set /a "s+=1, i=%2, k=%3, pi=(i+k)/2"
     set /a pv=%1[!pi!]
     if !pi! neq !k! set /a "%1[!pi!]=%sw1%, %1[!k!]=%sw1%, %1[!pi!]=%sw1%"
     set /a a=i, ub=k-1
     for /L %%i in (!i!,1,!ub!) do (
      if !%1[%%i]! leq !pv! (
        if %%i neq !a! set /a "%1[%%i]=%sw2%, %1[!a!]=%sw2%, %1[%%i]=%sw2%"
        set /a a+=1
     ))
     if !a! neq !k! set /a "%1[!a!]=%sw3%,  %1[!k!]=%sw3%,   %1[!a!]=%sw3%"
     set /a p[!s!]=a, pm=p[!s!]-1
     if %2 lss !pm! call :qsort2_ric %1 %2 !pm!
     set /a pm=p[!s!]+1
     if !pm! lss %3 call :qsort2_ric %1 !pm! %3
     set /a s-=1
exit /b
 
:PrintArray [arrayName] [lowBound] [upBound]
  For /L %%C in (%2 1 %3) do echo %1[%%C]=!%1[%%C]!
exit /B
 
:difftime
  for /F "tokens=1-8 delims=:.," %%a in ("!t0: =0!:!t1: =0!") do set /a "a=(((1%%e-1%%a)*60)+1%%f-1%%b)*6000+1%%g%%h-1%%c%%d, a+=(a>>31) & 8640000, a*=10"
  echo Elapsed: %a% msec.
goto :eof
1
Миниатюры
Полезные BAT/CMD скрипты  
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
01.07.2014, 19:49  [ТС] 71
Получение сведений о версии файла и CRC32 [через makecab]

Способ найден на просторах Интернета.
Мною упрощен и превращен в функцию.
Демо:

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
@echo off
SetLocal EnableExtensions
:: Полный путь к файлу
set file=h:\_CMD рус\FileVersion\Units_Compile_helper.exe
 
call :GetFileInfo "%file%" "*ver*" FileVer
echo Версия файла: %FileVer%
 
call :GetFileInfo "%file%" "*vers*" ProductVer
echo Версия продукта: %ProductVer%
 
call :GetFileInfo "%file%" "*csum*" CheckSum
echo CRC32: %CheckSum%
 
call :GetFileInfo "%file%" "*lang*" Language
echo Язык: %Language%
 
pause
exit /B
 
:GetFileInfo [_in_ FullFileName] [_in_ Type of Information] [_out_ Variable, that receive a bufer]
  pushd "%~dp1" & echo "%~nx1"> "%TEMP%\file.path"
  (echo .set DoNotCopyFiles=on&echo .Set Cabinet=off&echo .Set Compress=off&echo .Set InfFileLineFormat="%~2") > "%TEMP%\cab.inf"
  makecab /d InfFileName="%TEMP%\file.inf" /d "DiskDirectory1=%TEMP%" /f "%TEMP%\cab.inf" /f "%TEMP%\file.path" /v0 >NUL
  for /f "usebackq skip=4 delims=" %%f in ("%TEMP%\file.inf") do set "%~3=%%f"
  (del /f "%TEMP%\file.inf" & del /f "%TEMP%\file.path" & del /f "%TEMP%\cab.inf") 2>NUL & popd
exit /B
Вдобавок еще несколько способов: http://stackoverflow.com/questions/6...ws-dll-version
5
Eva Rosalene
T for Trans-
4051 / 1590 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
14.07.2014, 11:05 72
Комбинированный BAT + JS скрипт dnsview (просмотр кэша DNS)

Ключи
Bash
1
-filter "Параметр|Маска"
Параметр - одно из шести свойств "name", "type", "ttl", "length", "section", "value"
Маска - набор знаков с подстановочными символами ? и *
Множественный.

Bash
1
-freg "Параметр|Регулярка"
Регулярка в данном случае - простое регулярное выражение без возможности просмотра назад (особенность JS)
Множественный.

Bash
1
-fnum "Параметр Оператор Число"
Оператор - ">", "<", "=", "!=", ">=", "<="
Множественный

Bash
1
-format "Формат"
Выводимый формат. На выбор: CSV / JSON.
Если не указано, выводит в форматированную таблицу.

Bash
1
-? или -h
Бесполезная справка.

Пример
Bash
1
2
3
4
5
6
7
8
dnsview -filter "Name|*cyber*" -freg "Value|(?:[0-9]{1,3}\.){3,3}[0-9]{1,3}"
::Выведет все известные ресурсы с числовыми адресами и с "cyber" в имени.
 
dnsview -fnum "TTL > 20000" -fnum "TTL < 30000" -format csv
::Выведет все ресурсы, TTL которых больше 20000, но меньше 30000 секундв формате csv
 
dnsview -filter "Section|Additional" -format json
::Выведет все ресурсы из секции Additional в формате JSON
Скриншот

Код
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
@set @x=0; /*
@echo off
for /f "usebackq tokens=1* delims=:" %%A IN (`chcp`) DO for /f "usebackq tokens=*" %%C IN ('%%B') DO set "BACKUP_CODEPAGE=%%~C"
chcp 861 > nul
ipconfig /displaydns | cscript //e:jscript //nologo "%~f0" %*
chcp %BACKUP_CODEPAGE% > nul
goto :eof
*/
 
function argReader(mode, cs){
   var objReader = {
      mode: 1,
      insensitive: 0,
      keys: {},
      objRet: {unnamed: []},
 
      trigger: function (key, name){
         if (name == "unnamed") return;
         if (this.insensitive) key = key.toUpperCase();
         this.keys[key] = {name: name, type: "trigger"};
         this.objRet[name] = 0;
      },
 
      named: function (key, name){
         if (name == "unnamed") return;
         if (this.insensitive) key = key.toUpperCase();
         this.keys[key] = {name: name, type: "named"};
         this.objRet[name] = "";
      },
 
      multiple: function (key, name){
         if (name == "unnamed") return;
         if (this.insensitive) key = key.toUpperCase();
         this.keys[key] = {name: name, type: "multiple"};
         this.objRet[name] = [];
      },
 
      read: function (){
         for (var i = 0; i < WScript.Arguments.count(); i++){
            if (((this.mode & 1) && (WScript.Arguments(i).charAt(0) == "/")) || ((this.mode & 2) && (WScript.Arguments(i).charAt(0) == "-"))){
               var key = WScript.Arguments(i).slice(1);
               if (this.insensitive) key = key.toUpperCase();
               if (typeof this.keys[key] == "undefined") continue;
               switch (this.keys[key].type){
                  case "trigger": this.objRet[this.keys[key].name] = 1; break;
                  case "named" : 
                     if (i + 1 < WScript.Arguments.count()) {
                        i++; 
                        this.objRet[this.keys[key].name] = WScript.Arguments(i);
                     } else {WScript.Echo("Missed parameter '" + key + "'"); WScript.Quit(1);}
                     break;
                  case "multiple": 
                     if (i + 1 < WScript.Arguments.count()) {
                        i++; 
                        this.objRet[this.keys[key].name].push(WScript.Arguments(i));
                     } else {WScript.Echo("Missed parameter '" + key + "'"); WScript.Quit(1);}
                     break;
                  default: break;
               }
            } else this.objRet.unnamed.push(WScript.Arguments(i));
         }
         return this.objRet;
      }
   }
   if (typeof mode != "undefined") objReader.mode = mode;
   if (typeof cs != "undefined") objReader.insensitive = cs;
   return objReader;
}
argReader.prototype = Object;
 
var objReader = new argReader(2, 1);
 
objReader.multiple("filter", "filter");
objReader.multiple("freg", "freg");
objReader.multiple("fnum", "fnums");
objReader.named("format", "format");
objReader.trigger("?", "help");
objReader.trigger("h", "help");
 
var argCol = objReader.read();
 
if (argCol.help){
   WScript.Echo("Usage: " + WScript.ScriptName.replace(/\.[^\.]+$/g, "") + " [-filter \"<parametr|mask>\"] [-freg \"<parametr|RegExp>\"] [-format \"csv|json\"]");
   WScript.Echo("\t-filter, -freg could be multiple");
   WScript.Quit();
}
 
 
var cStr, inBody = 0, inBlock = 0;
 
var fullText = WScript.StdIn.ReadAll();
var fullArr = fullText.replace(/\r/gm, "").split(/\n\s*\n/gm);
for (var i = 0; i < fullArr.length; i++) {
   fullArr[i] = fullArr[i].replace(/^\n+/m, "").replace(/\n+$/m, "");
   fullArr[i] = fullArr[i].replace(/([\n])[ \f\t\v]+/gm, "$1").replace(/[ \f\t\v]+[\n]/gm, "$1");
   fullArr[i] = fullArr[i].replace(/^[ \f\t\v]+/gm, "").replace(/[ \f\t\v]+$/gm, "");
 
   fullArr[i] = fullArr[i].replace(/^.*\n+-+\n+/gm, "").split(/\n+/gm);
 
   for (var n = 0; n < fullArr[i].length; n++) fullArr[i][n] = fullArr[i][n].replace(/^.*:\s+([^ \f\t\v]*)\s*/g, "$1");
}
 
var parsed = [];
 
 
for (var i = 0, n = 0; i < fullArr.length; i++){
   if (fullArr[i].length < 6) continue;
   parsed[n] = {};
   parsed[n]["name"]    = fullArr[i][0];
   parsed[n]["type"]    = fullArr[i][1];
   parsed[n]["ttl"]     = fullArr[i][2];
   parsed[n]["length"]  = fullArr[i][3];
   parsed[n]["section"] = fullArr[i][4];
   parsed[n]["value"]   = fullArr[i][5];
   n++;
}
 
var selected = [];
for (var i = 0, acc = [], rx, add = 1, op = "="; i < parsed.length; i++){
   add = 1;
 
   for (var x in argCol.filter){
      acc = argCol.filter[x].split("|");
      if (acc.length > 2) continue;
 
      rx = new RegExp("^" + acc[1].replace(/([\|\$\^\+\.\\\/\(\)\[\]\{\}])/g, "\\$1").replace(/\*/g, ".*").replace(/\?/g, ".?") + "$", "i")
        
      acc[0] = acc[0].toLowerCase().replace(/\s+/g, "");
      if (typeof parsed[i][acc[0]] == "undefined") add = 0;
 
      if (!rx.test(parsed[i][acc[0]])) add = 0;
   } 
 
   for (var x in argCol.freg){
      acc = argCol.freg[x].split("|");
      for (var j = 2; j < acc.length; j++) acc[1] += "|" + acc[j];
      acc = acc.slice(0,2);
 
      acc[0] = acc[0].toLowerCase().replace(/\s+/g, "");
      if (typeof parsed[i][acc[0]] == "undefined") add = 0;
      
      try { rx = new RegExp(acc[1], "i"); } catch (e) {WScript.Echo("RegExp definition error"); WScript.Quit(1);}
      if (!rx.test(parsed[i][acc[0].toLowerCase()])) add = 0;
   }
 
   for (var x in argCol.fnums){
      if (/^[<>=]/.test(argCol.fnums[x])) {add = 0; continue;}
 
      op = argCol.fnums[x].match(/[!><=]+/);
      if (!op) {add = 0; continue;}
      op = op[0];
      acc = argCol.fnums[x].split(/[!><=]+/);
      if (acc.length < 2) {add = 0; continue;}
      acc[0] = acc[0].toLowerCase().replace(/\s+/g, "");
      acc[1] = acc[1].replace(/^\s+/, "").replace(/\s+$/, "")
 
 
      if (typeof parsed[i][acc[0]] == "undefined") {add = 0; continue;}
      if (isNaN(acc[1])) {add = 0; continue;}
 
      switch (op){
         case ">" : if (parseInt(parsed[i][acc[0]], 10) <= parseInt(acc[1], 10)) add = 0; break;
         case "<" : if (parseInt(parsed[i][acc[0]], 10) >= parseInt(acc[1], 10)) add = 0; break;
         case "=" : if (parseInt(parsed[i][acc[0]], 10) != parseInt(acc[1], 10)) add = 0; break;
         case "<=": if (parseInt(parsed[i][acc[0]], 10) >  parseInt(acc[1], 10)) add = 0; break;
         case ">=": if (parseInt(parsed[i][acc[0]], 10) <  parseInt(acc[1], 10)) add = 0; break;
         case "!=": if (parseInt(parsed[i][acc[0]], 10) == parseInt(acc[1], 10)) add = 0; break;
         default: add = 0; break;
      }
   }
 
   if (add) selected.push(parsed[i]);
}
 
format = argCol.format.toLowerCase();
 
switch (format){
   case "csv": printCsv(selected); break;
   case "json": printJson(selected); break;
   case "": printNormal(selected); break;
   default: WScript.Echo("Unknown format. Sorry");
}
 
WScript.Echo();
 
function printCsv(arr){
   if (arr.length < 1) return;
   var grs = ["name", "type", "ttl", "length", "section", "value"];
   WScript.StdOut.Write("\"" + grs[0].toUpperCase() + "\"");
   for (var i = 1; i < grs.length; i++) WScript.StdOut.Write(", \"" + grs[i].toUpperCase() + "\"");
 
   for (var i = 0; i < arr.length; i++){
      WScript.StdOut.Write("\n");
      WScript.StdOut.Write("\"" + arr[i][grs[0]] + "\"");
      for (var j = 1; j < grs.length; j++) WScript.StdOut.Write(", \"" + arr[i][grs[j]] + "\"");
   }
   return;
}
 
function printNormal(arr){
   if (arr.length < 1) return;
   WScript.Echo();
   
   var maxlen = {};
   var grs = ["name", "type", "ttl", "length", "section", "value"];
   var totalLength = 0;
   
   for (var p in grs) maxlen[grs[p]] = grs[p].length + 2;
   for (var r in arr) for (var p in grs) if (arr[r][grs[p]].length + 2 > maxlen[grs[p]]) maxlen[grs[p]] = arr[r][grs[p]].length + 2;
   for (var i in maxlen) totalLength += maxlen[i];
   
   WScript.StdOut.Write(stab(grs[0].toUpperCase(), maxlen[grs[0]], 1));
   for (var i = 1; i < grs.length; i++) WScript.StdOut.Write(stab(grs[i].toUpperCase(), maxlen[grs[i]], 1));
   WScript.StdOut.Write("\n" + stab("", totalLength, 0, "-"));
   
   for (var i = 0; i < arr.length; i++){
      WScript.StdOut.Write("\n");
      WScript.StdOut.Write(stab(arr[i][grs[0]], maxlen[grs[0]], 1));
      for (var j = 1; j < grs.length; j++) WScript.StdOut.Write(stab(arr[i][grs[j]], maxlen[grs[j]], 1));
   }
   return;
}
 
function printJson(arr){
   var tCnt = 6, nCnt;
 
   WScript.StdOut.Write("[");
 
   if (arr.length) {
     WScript.StdOut.Write("{"); 
     nCnt = 0;
     for (var p in arr[0]) {
       WScript.StdOut.Write("\"" + p + "\":\"" + arr[0][p] + "\""); 
       if (nCnt < tCnt - 1) WScript.StdOut.Write(", ");
       nCnt++;
     } 
     WScript.StdOut.Write("}");
   }
 
   for (var i = 1; i < arr.length; i++) {
     WScript.StdOut.Write(", {");
     var nCnt = 0;
     for (var p in arr[i]) {
        WScript.StdOut.Write("\"" + p + "\":\"" + arr[i][p] + "\"");
        if (nCnt < tCnt - 1) WScript.StdOut.Write(", ");
        nCnt++;
     }
     WScript.StdOut.Write("}");
   }
 
   WScript.StdOut.Write("]");
   return;
   
}
 
function stab(str, len, right, symbol){
   if (typeof right == "undefined") right = 0;
   if (typeof symbol == "undefined") symbol = " ";
   var strlen = str.length;
   
   if (str.length > len) return str;
   for (var i = 0; i < len - strlen; i++) if (right)
       str = symbol + str;
   else
       str += symbol;
   return str;
}


UPD #01: Добавлены арифметические операции. Добавлены примеры кроме скриншотов.

Вложения
Полезные BAT/CMD скрипты
4
Смолевич
110 / 68 / 6
Регистрация: 19.07.2014
Сообщений: 456
07.08.2014, 00:52 73
Как упаковать BAT в EXE?
Как скрыть консоль в пакетном файле BAT или CMD?

Может быть, не совсем по теме...
Может быть, даже совсем не по теме...

Но вот наваял я простенький упаковщик BAT в EXE: Упаковщик BAT/CMD/JS/VBS в EXE "Script2Bin 1.0.0.0"
Получается довольно легкий (от 7 КБ) exe, не требующий (по моей задумке) никаких лишних библиотек на компьютере, и при запуске открывающий консоль с BATником.
А может и НЕ открывающий - есть такой приятный бонус: настройка тихого режима, когда при запуске EXE консоль не показывается, но батник выполняется.

Добровольцы могут протестировать и, если понравится, пользоваться...
Может со временем добавлю новых фич, если будет, скажем так, пользоваться спросом...
2
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
24.08.2014, 23:35  [ТС] 74
EventLog Errors ver. 1.1.

Назначение:
Скрипт формирует HTML отчеты со списком системных ошибок и предупреждений
из журнала событий (журналы "Приложение", "Система" и "Установка").

Используется программа Microsoft LogParser.

Что такое журнал событий?


Обо всех ошибках операционной системы и приложений можно узнать из Журнала событий. Эта постоянно работающая служба фиксирует основные события, происходящие в системе, в том числе сбои и ошибки. Все записи журнала событий отсортированы по времени создания и разделены на три большие группы в зависимости от источников событий. Для просмотра Журнала событий можно:

1) Нажать Win + R и ввести eventvwr.msc
или
2) воспользоваться консолью Управление компьютером.

Чтобы вызвать консоль Управление компьютером щелкните правой клавишей мыши по значку Мой компьютер (Пуск → правый щелчок Мой компьютер) и в контекстном меню выберите Управление

Название: 1331558817_menu.jpg
Просмотров: 1851

Размер: 17.7 Кб

Откроется окно консоли Управление компьютером. В левой части откройте ветви Служебные программы и Просмотр событий. Щелкните по значку Система и в правой части откроются записи Журнала событий, поставляемые различными системными службами.

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


Двойной щелчок на любой записи в правой части окна открывает окно с подробной записью данного события. Кнопки со стрелками в верхнем правом углу обеспечивают просмотр записи журнала вперед и назад. Для закрытия окна нажмите ОК или Отмена.

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


Если щелкнуть в левой части окна по значку Приложения, то в правой отразятся записи Журнала, относящиеся к работе приложений. Существует три типа событий, на которые указывает значок перед записью:

Название: 1331558798_uvedom.jpg
Просмотров: 1862

Размер: 999 байт Уведомление --- обычное событие, все прошло успешно;

Название: 1331558753_predupr.jpg
Просмотров: 1863

Размер: 1.0 Кб Предупреждение- есть небольшие проблемы при выполнении задачи;

Название: 1331558790_oshibka.jpg
Просмотров: 1847

Размер: 1.1 Кб Ошибка --- это то, что нас в данном случае интересует.

Типичными безобидными ошибками являются сообщения службы времени и невозможности соединиться с сервером времени в Интернете (компьютер был отключен от сети) или сообщения об ошибках чтения компакт-диска (диск поцарапан, или загрязнен).




Как использовать программу

1. Скачать архив. Распаковать.

2. Запустить скрипт "Получить список ошибок из журнала событий.cmd"

3. Заархивировать папку LOGS в архив формата ZIP
и прислать для анализа специалистам.


Что в папке LOGS ?

В папке LOGS будут созданы отчеты об ошибках и предупреждениях:
- EventLog_APPLICATION.html (журнал "Приложения")
- EventLog_SYSTEM.html (журнал "Система")
- EventLog_SETUP.html (журнал "Установка", кроме Windows XP - там его нет).
1
Вложения
Тип файла: zip EventLog Errors.zip (1.53 Мб, 130 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
24.08.2014, 23:42  [ТС] 75
CheckDisk Log ver 1.6.
Получение отчета проверки диска

1. Распакуйте архив.

2. Запустите файл "Получение отчета проверки диска.cmd"

3. Нажмите 1, если хотите проверить диск на ошибки и получить отчет (система будет перезагружена!!!).
....Нажмите 2, если нужно только получить отчет.

Будет создан отчет "CheckDisk_report.html"

4. Запакуйте его в архив ZIP и прикрепите к сообщению в теме, где Вам оказывают помощь.
4
Вложения
Тип файла: zip CheckDisk.zip (948.3 Кб, 40 просмотров)
YupiRex
183 / 140 / 32
Регистрация: 04.10.2013
Сообщений: 140
09.11.2014, 15:39 76
динамическое меню:
Кликните здесь для просмотра всего текста
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
меню 1
menu 2
#####
set width=21
set height=11
@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
mode con:cols=%width% lines=%height%
set /a Nstr=0
for /f "tokens=1* delims=" %%i in (%~dpf0) do (
    if "%%i"=="#####" goto begin
    set /a Num+=1
    set menu!Num!=!menu%Num%!%%i)
:begin
set menu1=* %menu1%
set NumT=1
:str
CLS
for /l %%i in (1,1,%Num%) do (echo.!menu%%i!)
echo. __________________
echo.^| W-Вверх S-Вниз   ^|
echo.^| R-Запуск         ^|
echo.^| Q-Выход          ^|
echo.^|__________________^|
choice /c wsrq /n 
if %errorlevel%==1 call :math "1" "%Num%" "-1"
if %errorlevel%==2 call :math "%Num%" "1" "+1"
if %errorlevel%==3 call :%NumT%
if %errorlevel%==4 goto xt
goto str
:xt
endlocal
exit /b
:math
set menu%NumT%=!menu%NumT%:~2!
if %NumT%==%~1 (set /a NumT=%~2) else (set /a NumT=%NumT%%~3)
set menu%NumT%=* !menu%NumT%!
exit /b
:1
echo 1
pause
exit /b
:2
echo 2
pause
exit /b

инструкция:в начале до 5 диезов вписываем название пунктов меню,
в конце создаем блок:
Кликните здесь для просмотра всего текста
Bash
1
2
:X
exit /b

где X номер строки пункта, в этом блоке описываем нужные косанды для пункта меню
2
YupiRex
183 / 140 / 32
Регистрация: 04.10.2013
Сообщений: 140
09.11.2014, 15:51 77
шутка(прокатит тем кто не лочит экран) при установки запускать от имени админа, при удалении нужно запустить командную строку от имени админа и написать uninstall, фразы можно дописывать...., в принципе реализовано интерактивный ComSpec
Кликните здесь для просмотра всего текста
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
set un=%1
if DEFINED un goto %un%
md %ALLUSERSPROFILE%\FUNCMD
more +7 %~dpf0 > "%ALLUSERSPROFILE%\FUNCMD\FunCMD.bat"
reg add "HKLM\Software\Microsoft\Command Processor" /v AutoRun /t REG_SZ /d "%ALLUSERSPROFILE%\FUNCMD\FunCMD.bat" /f
ftype batfile=cmd.exe /d /c "%%1" %%*
exit /b
GOTO NXT
::-------------В этот блок нужно вставить фразы которые хотим видеть
Ого какая крутая команда!
Такие команды пишешь, наверно шаришь
Да ты упорот!
Наверно еще пару команд нужно вести
А теперь сиськи! (.)(.)
Какую еще ты знаешь команду
Купи слона!!!
::-------------
:NXT
@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set /a Nstr=0
:: считываем фразы
for /f "skip=2 tokens=1* delims=" %%i in (%~dpf0) do (echo %%i
    if "%%i"=="::-------------" goto nxt
    set /a Nstr+=1
    set Text!Nstr!=%%i)
:nxt
::echo %Nstr%
::for /l %%i in (1,1,%Nstr%) do (echo !Text%%i!)
CLS
:: ------------------------------------------------------------Приветствие
ver
echo (c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
echo.
:: ----------------------------------------тело обработки команд (в цикле)
:start
set comm=
set /p comm=%CD% ^>
if "!comm!"=="uninstall" goto uninstall
:: выполнение команды
call cmd /d /c "%comm%" 
:: вызов процедуры веселого коментария (можно завязать на командах %comm%)
call :fan
:: очистра переменной от команды, что бы при нажатии энтера не повторилась команда
set comm=
goto start
:: ------------------------------------------------конец обработки команды
:: -----------------------------------=Процедура создания веселого комента
:fan
:: Генерим случайный цвет
set /a col=(16)*%random%/32768
:: преобразовуем переменную от 10 до 15 в HEX
if %col% gtr 9 (
if !col! == 10 set col=a
if !col! == 11 set col=b
if !col! == 12 set col=c
if !col! == 13 set col=d
if !col! == 14 set col=e
if !col! == 15 set col=f)
:: Генерим случайную фразу
set /a rannd=1+(!Nstr!)*%random%/32768
:: выводим на экран Цветную фразу)
call :writeln 0%col% "!Text%rannd%!"
exit /b 
 
:write
  setlocal
  :write1
  set "tempFolder=%TEMP%\%~n0.%time:~-2%.%random%"
  md "%tempFolder%" 2>nul || goto write1
  pushd %tempFolder%
  set /p .=.<nul>"%~2"
  findstr /a:%~1 /c:"." /s "%~2"
  if "%~3"=="" (set /p .=  <nul) else set /p .= <nul
  popd
  rd /s /q "%tempFolder%" 2>nul
endlocal & exit /b
:writeLn
  call :write %1 "%~2" %3
  echo:
exit /b
 
:uninstall
:: удаление скрипта
reg delete "HKLM\Software\Microsoft\Command Processor" /v AutoRun  /f
rd /s /q "%ALLUSERSPROFILE%\FUNCMD" 
ftype batfile="%%1" %%*
exit /b
Переменные
!Nstr! - переменная для подсчета кол-ва строк
!Text%%i! - Переменные содержащие фразы
!Text%rannd%! - случайно сгенериная переменная содержащая фразу
!col! - переменна от 0 до 15 для определения цвета (Случайная)
%rannd% - переменна от 1 до !Nstr! для определения Фразы (Случайная)
 
Фразы можно дополнять
Вопросительный знак в фразах ставить нельзя.
Для удаления запускаем от имени админа и пишем uninstall

в коде спец символы, полный код в архиве
2
Вложения
Тип файла: 7z funcmd.7z (1.6 Кб, 53 просмотров)
stasrich3
0 / 0 / 0
Регистрация: 08.11.2014
Сообщений: 1
12.11.2014, 08:28 78
День добрый. Скрипт для оправки файлов на FTP + контроль выполнения LOG + отчет на почту

Просто оставлю это здесь, может кому пригодится. Можете пользоваться или залить на другие ресурсы где это может понадобиться.

1 файл ftp_command.txt (тут лежат параметры)
Код
login
password
cd директория куджа класть на FTP
mput C:\*.txt команда множественного копирования файлов с локальной машины где запускается скрипт
quit
2 файл ftp_put.bat (сам батник)
Bash
1
2
3
4
5
@Echo Off
set log=c:\scripts\log.txt
ftp -s:ftp_command.txt -i ВАШ IP АДРЕС СЕРВЕРА FTP > log.txt
type log.txt | findstr "^[3-5][0-9][0-9]" && echo yes тут у нас отбор по частым ошибкам при отправке 300-599 коды ошибок
if errorlevel=1  (blat -body "error send ftp" -subject "ERROR ftp_put script" -p ftp -to ВАША ПОЧТА -charset windows-1251 -attach %log%)
На здоровье!
0
Dragokas
Эксперт WindowsАвтор FAQ
17026 / 7083 / 856
Регистрация: 25.12.2011
Сообщений: 10,906
Записей в блоге: 16
24.02.2015, 21:26  [ТС] 79
Сброс/изменение забытого пароля в Windows

Автор: Foxik.

Чтобы изменить пароль любой локальной учетной записи пользователя, достаточно запустить этот скрипт, с установочного диска Windows или с диска восстановления, Windows PE или установленной Windows на другом разделе жесткого диска.
На написание скрипта меня сподвигло прочтение этой статьи.
Отдельное спасибо, Dragokas.
3
Вложения
Тип файла: zip ChangePassword.zip (1.6 Кб, 194 просмотров)
Maks
Модератор
Эксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
3808 / 1913 / 254
Регистрация: 13.03.2013
Сообщений: 8,734
Записей в блоге: 4
12.03.2015, 07:03 80
На днях поставили задачу певести всех пользователей с одного принт-сервера на базе ОС Windows Server, на другой.
Первым делом, ессно, перенес сами принтеры.
Далее, был создан батник и применен для каждой группы пользователей (которые разбиты по отделам, как и принтеры).
Bash
1
2
3
4
5
6
@echo off
::Удаление принтера HP_M1536_IT с сервера fileserver
rundll32 printui.dll,PrintUIEntry /dn  /n \\fileserver\HP_M1536_IT
 
::Добавление принтера HP_M1536_IT с сервера nf-print
rundll32 printui.dll,PrintUIEntry /y /in /n \\nf-print\HP_M1536_IT
1
12.03.2015, 07:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2015, 07:03

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

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

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


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

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

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