Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/1999: Рейтинг темы: голосов - 1999, средняя оценка - 4.60
Dragokas
Эксперт WindowsАвтор FAQ
17168 / 7222 / 865
Регистрация: 25.12.2011
Сообщений: 11,016
Записей в блоге: 16
1

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

15.10.2012, 00:56. Просмотров 397389. Ответов 167

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

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

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

Другое
Расчёт индекса массы тела и идеального веса ссылка
21
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2012, 00:56
Ответы с готовыми решениями:

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

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

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

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

167
greg zakharov
Покинул форум
2401 / 991 / 281
Регистрация: 07.05.2015
Сообщений: 1,991
12.05.2016, 14:30 121
uptime.cmd - исправленная версия, не требует chcp и явного указания typeperf'у счетчика производительности, так как подстановка производится отностельно индекса того или иного счетчика (в данном случае "\Система\Время работы системы"), что по сути делает сценарий локаленезависимым.
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
@echo off
  setlocal enabledelayedexpansion
    for %%i in (lodctr.exe) do (
      if not exist "%%~$PATH:i" (
        echo:Could not retrieve system up time.
        goto:eof
      )
    )
    set "pc=%tmp%\perf.tmp" % rem : performance counters list
    lodctr /s:%pc%
    call:findlocalestr 2   object
    call:findlocalestr 674 counter
    for /f delims^=^"^ tokens^=3 %%i in (
      'typeperf "%object%%counter%" -sc 1 ^| findstr /rc:":"'
    ) do 2>nul set /a "s=%%i" % rem : total seconds
    set /a "ss=s%%60", "s/=60", "mm=s%%60", "s/=60", "hh=s%%24", "dd=s/24"
    for %%i in (%hh% %mm% %ss%) do (
      if %%i lss 10 (set "t=!t!0%%i:") else (set "t=!t!%%i:")
    )
    echo:%dd%.%t:~,-1%
    del /f /q "%pc%"
  endlocal
exit /b
 
:findlocalestr
for /f "tokens=2 delims==" %%i in (
  'find "%~1=" "%pc%" ^| findstr /brc:"%~1="'
) do set "%2=\%%i"
exit /b
Из минусов - создается временный файл. Так как сценарий я запилил у себя на хабе, может со временем будет исправлено и это.
1
YuS_2
Любознательный
1235 / 675 / 203
Регистрация: 10.03.2016
Сообщений: 1,590
03.06.2016, 06:06 122
Интерактивный сценарий для упаковки файлов динамических виртуальных жестких дисков (формат "vdi", но возможно добавление других), использующихся в Oracle VM VirtualBox. Есть возможность выбора из подключенных виртуальных дисков, либо непосредственно указываем абсолютный путь к не подключенным файлам (абсолютные пути к подключенным файлам тоже работают). Используется консольный менеджер виртуальной машины, путь к которому необходимо либо прописать в системную переменную 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
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
@echo off
rem v2.1
 
rem путь к файлу конфигурации VirtualBox
set "Vbox=%userprofile%\.VirtualBox\VirtualBox.xml"
 
rem путь к файлу vboxmanage.exe должен быть прописан в системной переменной Path,
rem либо для корректного запуска необходимо указать абсолютный путь:
set "vbman=vboxmanage.exe"
 
rem -----
rem Инициализация переменных, для поддерживаемых расширений. Число расширений
rem можно увеличить добавлением переменных extN, по аналогии с существующими.
rem Кроме того, необходимо указать их количество в переменной n
set "ext1=*.vdi"
set "ext2=*.vhd"
set "ext3="
set n=2
rem -----
 
for /l %%g in (1,1,%n%) do (
    if defined ext%%g (call :dper %%g)
)
for /l %%h in (1,1,%n%) do (
    if defined ext%%h (call :fper %%h)
)
goto pp
:dper
set vn=%1
call set "dext=%%dext%% "%%ext%vn%%%""
exit /b
:fper
set nv=%1
call set "fext=%%fext%% /c:"%%ext%nv%:~1%%""
exit /b
:pp
echo Сценарий упаковки файла динамического виртуального диска Oracle VirtualBox.
echo Перед упаковкой, необходимо в загруженной гостевой ОС выполнить максимальную
echo дефрагментацию, затем заполнить нулями свободное пространство ^(для этого
echo хорошо подходит программа sDelete ^(sysinternals.com^)^).
echo Примечание: Имя упаковываемого, неподключенного файла виртуального диска НЕ
echo должно совпадать с любым подключенным файлом, либо абсолютный путь в сценарии
echo должен быть указан только от реально подключенного виртуального диска.
echo.
choice /c yn /m "Продолжаем "
if "%errorlevel%"=="1" goto begin
echo.
echo Выходим
echo.
pause&&exit
:begin
choice /n /c 12 /m "Выберите 1 - для работы с подключенными дисками, 2 - для указания абсолютного пути: "
goto disk%errorlevel%
:disk1
set "vm=%Vbox%"
goto run
:disk2
set "vm="
:run
cls
echo Выполните следующие действия:
echo.
pushd "%~dp0"
if not exist "%vm%" goto out
echo Список имен подключенных машин:
set cnt=0 
for /f tokens^=2^ delims^=^" %%i in ('^<"%vm%" find "MachineEntry"') do call :list "%%~i"
echo.
goto out
:list
if "%~1"=="" (echo Нет подключенных машин&&goto out)
set /a cnt+=1
set "vbu%cnt%=%~1"
call set "tmp=%%vbu%cnt%%%"
for /f "tokens=2 delims=: " %%j in ('%vbman% showvminfo %tmp%') do echo %cnt%. %%j&&goto ex
:ex 
exit /b
:vbox
set ct=0
set "v=%~1"
%vbman% showvminfo %v% |findstr /i %fext% >nul
if errorlevel 1 (echo Диски не найдены&&exit /b 1)
for /f "tokens=3,4 delims=)(" %%a in ('%vbman% showvminfo %v% ^|findstr /i %fext%') do (
    call :hd "%%~a" "%%~b"
)
exit /b
:hd
set "$1=%~1"
set "$2=%~2"
set /a ct+=1
set hd%ct%=%$2:~6%
echo %ct% %~nx1
exit /b
:out
if exist "%vm%" (
    echo Выберите номер подключенной VM
    set /p x="(q=выход): "
) else (
    echo Укажите абсолютный путь к каталогу с виртуальным диском 
    set /p x="(q=выход): "
    goto q2
)
:q1
if "%x%"=="" goto begin
if "%x%"=="q" (goto chce)
if defined vbu%x% (
    echo.
    echo Список дисков в выбранной виртуальной машине:
    echo.
    call :vbox "%%vbu%x%%%" ||goto chce
) else (
    goto begin
)
goto file
:q2
if "%x%"=="" goto begin
if "%x%"=="q" (goto chce)
set kon=0
for /l %%k in (1,1,%n%) do (
    if defined ext%%k call :tm %%k
)
goto tt
:tm
set dn=%1
call set prn=%%ext%dn%%%
if exist "%x%\%prn%" set /a kon+=1
exit /b
:tt
if %kon%==0 (echo.&&echo В этом каталоге нет файлов виртуальных дисков&&echo.&&goto chce)
:cont
cd /d "%x%"
echo.
echo Список файлов виртуального диска:
echo.
set cnt=0
for /f "delims=" %%a in ('dir /a-d/b %dext%') do (
    call :per "%%~a"
)
goto file
:per
set /a cnt+=1
set var%cnt%=%~1
call echo %cnt%. %%var%cnt%%%
exit /b
:file
echo.
set /p y="Введите номер виртуального диска: "
if defined hd%y% (call set "dsk=%%hd%y%%%"&&goto pusk)
call set "dsk=%%var%y%%%"
if not defined dsk (echo.&&echo Нет такого диска&&goto chce) else (goto pusk)
pause&&exit
:chce
choice /c yn /m "Выходим "
goto answ%errorlevel%
echo Ошибка. Выходим
pause&&exit
:answ1
echo Выход
timeout /t 3
exit
:answ2
goto begin
:pusk
echo.
echo Запускаем упаковку:
echo.
%vbman% modifyhd "%dsk%" --compact
if errorlevel 1 (
    echo.
    echo. ╔═══════════════════════════════════════════════════════════╗
    echo. ║ Ошибка!!! Имя файла виртуального диска совпадает с именем ║
    echo. ║ подключенного файла, при отличающихся абсолютных путях    ║
    echo. ╚═══════════════════════════════════════════════════════════╝
    echo.
)
echo.
goto chce
:answ255
:disk255
echo Ошибка&&pause&&exit
0
Вложения
Тип файла: rar compact_vd_v2.rar (2.0 Кб, 14 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
17168 / 7222 / 865
Регистрация: 25.12.2011
Сообщений: 11,016
Записей в блоге: 16
07.06.2016, 19:53  [ТС] 123
Проигрывание звука

Придумал такой вариант проигрывания звукового файла через mshta:

Вариант с доработкой от ComSpec:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
SetLocal EnableExtensions
 
set "mp3=c:\windows\media\tada.wav"
 
:: кол-во секунд воспроизведения
set delay=2
 
call :PlaySnd "%mp3%" %delay%
 
pause
goto :eof
 
:PlaySnd [Path] [Delay]
  set "SndPath=%~1" & set /a "delay2=%2+1"
  set "pause=new ActiveXObject('WScript.Shell').Run('ping -n $ localhost', 0, true)"
  set "script=<script>document.all.sound.src = '%SndPath:\=\\%'</script>"
  set "script2=<script>%%pause:$=%delay2%%%; close()</script>"
  call start /min /wait mshta "about:<bgsound id=sound>%script%%script2%"
exit /B
Старый вариант с убийством процесса:
Кликните здесь для просмотра всего текста

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
@echo off
SetLocal EnableExtensions
 
set "mp3=c:\windows\media\tada.wav"
 
:: кол-во секунд воспроизведения
set delay=2
 
call :PlaySnd "%mp3%" %delay%
 
pause
goto :eof
 
 
:PlaySnd [Path] [Delay]
  set "SndPath=%~1"
  set "SndPath=%SndPath:\=\\%"
  start /min mshta "about:<bgsound id=sound><script>document.all.sound.src = '%SndPath%'</script>"
  set /a delay2=%~2+1
  Timeout /? >NUL 2>&1 & if errorlevel 9009 (>NUL ping -n %delay2% 127.1) else (>NUL Timeout /T %~2 /Nobreak)
 
  for /f "tokens=2 delims=," %%a in ('tasklist /fo csv /nh /fi "IMAGENAME eq cmd.exe" 2^>NUL') do (
    for /f "UseBackQ skip=2 tokens=2 delims=," %%b in (`wmic process where "ParentProcessId=%%~a and caption='mshta.exe'" get ProcessId /format:csv 2^>NUL`) do (
      for /f "delims=" %%c in ("%%b") do taskkill /f /pid %%c >NUL
  ))
exit /B
1
greg zakharov
Покинул форум
2401 / 991 / 281
Регистрация: 07.05.2015
Сообщений: 1,991
05.10.2016, 22:21 124
"Открывашка" шелл-папок
Бывают ситуации, когда нужно в проводнике "запрыгнуть" в некую папку, скажем, AppData. Из самого проводника делать это неудобно, жать Tab в консоли также надоедает, в результате чего накидал командный сценарий, позволяющий "гулять" по такого рода папкам.
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
@echo off
  setlocal enabledelayedexpansion
    set "hklm=HKLM"
    set "hkcu=HKCU"
    set "key=\Software\Microsoft\Windows\CurrentVersion"
    set "key=%key%\Explorer\Shell Folders"
    
    set "i=0"
    call:getnames %hklm% %i%
    call:getnames %hkcu% %i%
    
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if !i! neq 1 goto:man
    
    set "i=0"
    for /f "tokens=1,* delims==" %%i in (
      'set arr ^| findstr /irc:"=%~1"'
    ) do (
      set "map=!map!%%~j..."
      set /a "i+=1"
    )
    set "map=!map:~,-3!"
    if /i "!map!" equ "~,-3" goto:man
    if !i! neq 1 echo !map!&goto:eof
    rundll32 shell32.dll,ShellExec_RunDLL "shell:!map:.=!"
  endlocal
exit /b
 
:getnames
  set "i=%2"
  for /f "tokens=1,2" %%i in (
    'reg query "%1!key!" ^| findstr /irc:"reg_sz"'
  ) do (
    if /i "%%j" equ "reg_sz" (
      set "arr.!i!=%%i"
    ) else (
      set "arr.!i!=%%i %%j"
    )
    set /a "i+=1"
  )
exit /b
 
:man
  set "map=" % rem : flush wrong pattern
  for %%i in (
    "Usage: %~n0 [path name]"
    ""
    "Example 1:"
    "   C:\> %~n0 d"
    "This command opens Desktop folder."
    ""
    "Example 2:"
    "   C:\> %~n0 ``common p''"
    "Jumps to Common Programs folder."
    ""
    "The next paths are available on this system:"
  ) do echo:%%~i
  for /f "tokens=1,* delims==" %%i in ('set arr') do (
    set "map=!map!%%j..."
  )
  echo !map:~,-3!
exit /b
Как оно работает, написано в сопроводительном мане, но на всякий случай поясню кое-какие моменты (у меня сценарий назван j.cmd).
Код
E:\sandbox> j d
Пример выше открывает Desktop, в названиях папок где встречаются пробелы нужны кавычки:
Код
E:\sandbox> j "start m"
В этом примере будет открыто папка стартового меню пользователя.
Если соответсвий несколько, будут выведены возможные варианты, например:
Код
E:\sandbox> j s
Если соответсвий нет вовсе, выводится ман.
2
greg zakharov
Покинул форум
2401 / 991 / 281
Регистрация: 07.05.2015
Сообщений: 1,991
14.10.2016, 23:00 125
Вычисление md2, md4, md5, sha1, sha256, sha384 и sha512 хэшей файла
Подход не совсем уникальный, так как certutil "из коробки" появился начиная с Win2k3, правда тогда то было какое-то недоразумение, если учесть частые лаги. В общем, код ниже писался на Win7, но может кому и сгодится в хозяйстве (по умолчанию вычисляется sha256).
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
@echo off
  for %%i in (certutil.exe) do (
    if not exist "%%~$PATH:i" goto:err
  )
  setlocal enabledelayedexpansion
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if !i! equ 1 (
      call:sum "%~1"
      goto:eof
    )
    if !i! equ 2 (
      call:sum "%~1" "%~2"
      goto:eof
    )
    goto:man
  endlocal
exit /b
 
:err
  echo:Certutil has not been found.
exit /b
 
:man
  for %%i in (
    "Usage: %~n0 file [algorithm]"
    ""
    "Default algorithm is sha256."
    "Supported algorithms are md2, md4, md5,"
    "sha1, sha256, sha384 and sha512."
    ""
    "Note: this one was written and tested"
    "on Windows 7."
  ) do echo:%%~i
exit /b
 
:sum
  if not exist "%~1" goto:man
  if "%~2" equ "" (
    set "alg=SHA256"
  ) else (
    for /f "tokens=2 delims=:" %%i in (
      '2^>^&1 find "" %~2'
    ) do set "alg=%%i"
  )
  set "alg=!alg: =!"
  for /f "skip=1 delims=" %%i in (
    'certutil -hashfile "%~1" !alg!^
    ^| findstr /virc:"certutil"'
  ) do set "hash=%%i"
  if /i "!hash!" equ "" (
    echo:=^>err
  ) else (echo !hash: =!)
exit /b
Примеры использования:
Код
E:\sandbox> hasher app.exe
91b8d19a897cac6cfc638b0c195ee541e78781402e1d59dad7f3d532376f32d2

E:\sandbox> hasher app.exe md5
fef8118edf7918d3c795d6ef03800519
3
greg zakharov
Покинул форум
2401 / 991 / 281
Регистрация: 07.05.2015
Сообщений: 1,991
16.10.2016, 17:56 126
Монтирование Яндекс.Диска
В одной из тем был вопрос касательно монтирования Яндекс.Диска посредством WebDAV через комстроку, что возможно сделать лишь на винде > 2k3, то бишь начиная с Vista, - утверждать не стану, так как не проверялось, а вот на Win7 работает точно. Единственно, не свистоперделок ради, а для некоторой безопасности (хотя что есть безопасность?!), не хотелось бы сверкать паролем и именем пользователя от диска. Порывшись в своих старых записях, нашел заметку, как скрыть пароль от посторонних глаз.
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
@echo off
  for /f "tokens=2 delims=][." %%i in ('ver') do (
    for /f "tokens=2" %%j in ("%%i") do (
      if %%j lss 6 (
        echo:This requires Vista or above.
        goto:eof
      )
    )
  )
  setlocal enabledelayedexpansion
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if !i! neq 1 goto:man
    
    set "arg=%~1"
    if "!arg:~0,1!" neq "-" if "!arg:~0,1!" neq "/" goto:man
    if /i "!arg:~1!" equ "mount" (
      call:secureinput "User"
      echo.
      call:secureinput "Pass"
      echo.
      net use * https://webdav.yandex.ru !pass!^
      /user:!user!@yandex.ru /persistent:yes
      goto:eof
    )
    if /i "!arg:~1!" equ "unmount" (
      for /f "tokens=1" %%i in (
        'net use ^| findstr /irc:"yandex"'
      ) do net use %%i /delete
      goto:eof
    )
    goto:man
  endlocal
exit /b
 
:man
  for %%i in (
    "Usage: %~n0 [action]"
    "Where <action> is one of the next:"
    "   mount or unmount"
    ""
    "Example 1:"
    "   C:\bin> %~n0 -mount"
    ""
    "Note that while entering a user name and"
    "password both values are not displayed on"
    "the screen."
    ""
    "Example 2:"
    "   C:\bin> %~n0 -unmount"
  ) do echo:%%~i
exit /b
 
:secureinput
  <nul set /p "%~1=%~1: "
  for /f %%i in (
    '"prompt;$H&for %%i in (1) do rem"'
  ) do set "$=%%i"
  :repeat
    set "c="
    for /f "delims=" %%i in (
      '2^>nul xcopy /l /w "%~f0" "%~f0"'
    ) do if not defined c set "c=%%i"
    set "c=%c:~-1%"
    if not defined c goto:end
    if !$! equ !c! (
      <nul set /p "=!$! !$!"
      set "c="
      if defined %~1 set "%~1=!%~1:~0,-1!"
    ) else <nul set /p "="
    if not defined %~1 (
      set "%~1=!c!"
    ) else for /f delims^=^ eol^= %%i in ("!%~1!") do (
      set "%~1=%%i!c!"
    )
    goto:repeat
  :end
exit /b
Примеры:
Код
C:\bin> yadisk /mount
User:
Pass:
Диск Z: сейчас подключен к https://webdav.yandex.ru.

Команда выполнена успешно.

C:\bin> yadisk -unmount
Как уже было сказано при вводе имени и пароля символы не отображаются.
6
alpap
2985 / 1703 / 571
Регистрация: 26.04.2015
Сообщений: 5,644
14.11.2016, 18:22 127
Сделал утилиту, которая позволяет выводить из файла содержимое, расположенное между тегами.
Теги, в определенных пределах, могут быть довольно разнообразные, ниже пример.
Запуск: teg_s.bat файл откуда файл куда тег блок
Пример: teg_s.bat file.txt new.txt --- 2 (здесь берем все между 2-м и 3-м тегом вида, примерно -----)
Если параметр "блок" не указывать, будет взято содержимое между последним и предпоследним тегами или между первым и вторым, если блок единственный.
Тег или часть его, указывать максимально похожий на тот, что есть в файле, чтобы точнее его определить.

Код:

Windows Batch file
1
2
3
4
5
6
7
8
@echo off
if "%*"=="" (echo parameters are absent!& echo:[re-executing]& pause) else (set "f_in=%~1"& set "f_out=%~2"& set "teg=%~3"& set "sn=%~4")
setlocal enabledelayedexpansion
<"%f_in%" (for /f "delims=[]" %%a in ('find /n /v ""^|findstr/lc:"%teg%"') do @set/a n+=1, n_=n-1, sn_=sn+1& set "N!n!=%%a")
if "%sn%"=="" (set/a nd=N%n_%+1, kd=N%n%-1) else (set/a nd=N%sn%+1, kd=N%sn_%-1)
setlocal disabledelayedexpansion
<"%f_in%">"%f_out%" (for /f "delims=" %%a in ('"for /l %%a in (%nd%,1,%kd%) do @find /n /v ""|find "[%%a]""') do @set "s=%%a"& cmd/v/c echo[!s:*]^^=!)
exit
Пример:

Содержимое файла "file.txt":
Код
stroka aaa
ddd
aastroka
eee
strokaaa
fff
bbbaa
Содержимое "new.txt" по команде:
Код
teg_s.bat file.txt new.txt aa
fff

Содержимое "new.txt" по команде:
Код
teg_s.bat file.txt new.txt stroka 2
eee
1
volodin661
2595 / 1138 / 197
Регистрация: 10.12.2013
Сообщений: 3,834
26.11.2016, 04:45 128
Извлечение IP-адресов с помощью WMIC

Для вытаскивания информации из информационных систем в IT-отрасли нашего земного шара существуют стандартизированные механизмы.
Microsoft обязана им следовать и её реализация называется WMI ( Windows Management Instrumentation ).
Интерфейсом к WIM является утилита командной строки WMIC.

Например, извлечь IP-адрес(а), привязанный(ые) к сетевому адаптеру:
Windows Batch file
1
WMIC nicconfig WHERE "Caption like '%ethernet%'" GET IPAddress /FORMAT:value
Вывод:
Код
IPAddress={"10.10.10.10","172.17.17.17"}
Можно добавить в вывод интересные нам поля:
Windows Batch file
1
WMIC nicconfig WHERE "Caption like '%ethernet%'" GET Caption, IPAddress, IPSubnet /FORMAT:value
Вывод:
Код
Caption=[00000001] AMD PCNET Family PCI Ethernet Adapter
IPAddress={"192.168.88.118"}
IPSubnet={"255.255.255.0"}
Посмотреть другой адаптер:
Windows Batch file
1
wmic nicconfig where "Caption like '%PPP%'" get Caption, IPAddress, IPSubnet /format:value
Вывод:
Код
Caption=[00000006] WAN Miniport (PPPOE)
IPAddress=
IPSubnet=
Добавлено через 3 часа 19 минут
Хочу внести стратегическое дополнение.

Как я уже написал в самом начале,
WMI - это реализация DMTF-стандарта под названием CIM
( Common Information Model ); Майкрософт, будучи членом DMTF,
безусловно придерживался и будет придерживаться в дальнейшем этого стандарта.
В старой реализации WMI, которая относится ещё к Windows NT 4.0, на клиенте и на сервере были запущены сервисы,
которые использовали механизмы DCOM/RPC, для отправления запросов/получения данных.
WMIC использует именно эту старую реализацию.

В 2012-ом году, произошли изменения стандарта CIM, Microsoft отреагировал на это,
выпустив Windows Management Framework-3 и даже поменял аббревиатуру с WMI на MI ( Managment Infrastructure ),
что, впрочем, не мешает ему по-прежнему пользоваться термином WMI.
Главное отличие - это появление клиент-серверного протокола Web Services for Management или WS-MAN, который в Microsoft живёт под именем WinRM-сервис и который заменяет DCOM/RPC.
Новые cmdlet-ы powershell разговаривают на языке именно этого протокола,
то есть, внутреннее API полностью поменялось; в технические подробности не вдаюсь.

Теперь можно опрашивать и извлекать IP-адрес не только Windows-машин, но и Linux, а также маршрутизаторов, коммутаторов, пылесосов и кофемолок, лишь бы в последних был реализован сервис MI ( точнее, OMI - Open Management Infrastructure )

Итак, извлечь IP-адрес пылесоса наш WMIC не способен [ ],
поэтому современная стратегия использования WMI состоит в переходе на powershell.

refs:
https://donjones.com/2015/04/14/omi-cim-wmi/
https://powershell.org/2015/04/24/ma...tf-dictionary/
https://collaboration.opengroup.org/omi/
https://msdn.microsoft.com/en-us/pow...witch_overview
2
Eva Rosalene
Pure Free Digital Ghost
4134 / 1605 / 307
Регистрация: 06.01.2013
Сообщений: 4,197
Завершенные тесты: 2
02.12.2016, 02:09 129
По мотивам https://www.cyberforum.ru/post3934558.html

sudo.bat
Запуск команды с повышенными привилегиями с передачей всех аргументов.
(Комбинированный BAT/JS)

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@set @x=0; /*
    @cscript //nologo //e:jscript "%~dpnx0" %*
    @exit /b
*/
 
var Shell = new ActiveXObject("Shell.Application");
var WShell = new ActiveXObject("WScript.Shell");
 
var otherArgs = '';
for (var i = 1; i < WScript.Arguments.Count(); ++i)
    otherArgs += WScript.Arguments(i) + ' ';
otherArgs = otherArgs.substr(0, otherArgs.length - 1);
 
Shell.ShellExecute(WScript.Arguments(0), otherArgs, '', 'runas', 1);
Пример:
Windows Batch file
1
sudo notepad "C:\file1.txt"
root.bat
Запуск консоли с повышенными привилегиями в текущей рабочей директории, либо директории, переданной первым аргументом.

(комбинированный BAT/JS)

Javascript
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
@set @x=0; /*
    @cscript //nologo //e:jscript "%~dpnx0" %*
    @exit /b
*/
 
var Shell = new ActiveXObject("Shell.Application");
var WShell = new ActiveXObject("WScript.Shell");
var FSO = new ActiveXObject("Scripting.FileSystemObject");
 
var myWorkDir = WShell.CurrentDirectory;
 
if (WScript.Arguments.Count()) {
    try {
        var myFolder = FSO.GetFolder(WScript.Arguments(0));
    } catch (e) {
        WScript.StdErr.WriteLine('Specified PATH isn\'t found');
        WScript.Quit(1);
    }
    
    myWorkDir = WScript.Arguments(0);
    if (myWorkDir[myWorkDir.length - 1] != '\\')
        myWorkDir += '\\';
}
 
Shell.ShellExecute('cmd', '/c @cd /d ' + myWorkDir + ' & cmd', '', 'runas', 1);
Пример:
Windows Batch file
1
root C:\Users\FraidZZ
Windows Batch file
1
2
cd C:\Users\FraidZZ
root
1
YuS_2
Любознательный
1235 / 675 / 203
Регистрация: 10.03.2016
Сообщений: 1,590
02.12.2016, 12:22 130
В дополнение к предыдущему сообщению:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
>nul 2>&1 net session&&goto run
if /i "%~1"=="yes" goto run
>"%temp%\uac.vbs" echo set objShell=CreateObject^("Shell.Application"^)
>>"%temp%\uac.vbs" echo objShell.ShellExecute "%~0", "yes", , "runas", 1
"%temp%\uac.vbs"
exit /b
 
:run
del "%temp%\uac.vbs"
cd /d "%~dp0"
title %cd%
rem Место для основной программы. Текущий каталог = каталог запуска сценария.
echo Successfull! UAC unlock. Demo - this line remove...
pause
0
Dragokas
Эксперт WindowsАвтор FAQ
17168 / 7222 / 865
Регистрация: 25.12.2011
Сообщений: 11,016
Записей в блоге: 16
15.12.2016, 22:05  [ТС] 131
Поиск альтернативных файловых потоков, которые занимают слишком много места на диске

Как известно, большинство программ оценки свободного места (вроде WinDirStat) не показывают объем, занимаемый альтернативными файловыми потоками.
Этот скрипт призван заполнить такой недостаток.

По-умолчанию сканируется только системный диск.
В отчёт попадут файли и папки, чьи ADS занимают более 1000 байт. Можете изменить этот лимит в переменной MAX_STREAM_SIZE.

Совместимость: Windows Vista и выше.

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
@echo off
SetLocal EnableExtensions
 
set "MAX_STREAM_SIZE=1000"
 
cd /d "%~dp0"
2>nul del ADS.log
echo _______________________________
echo  ADS scaner by Alex Dragokas
title ADS scaner by Alex Dragokas
echo _______________________________
echo.
echo Scanning disk %SystemDrive% ...
echo Please, wait.
echo.
 
net session >NUL 2>NUL || (
  echo Запустите утилиту от имени Администратора !!!
  echo You need to launch this app. as Admin !!!
  pause>nul & goto :eof
)
:: for pseudo progress-bar purposes
 
set Drive=%SystemDrive%
 
call :ScanFolder %Drive%
 
:: 1 level
for /f "delims=" %%a in ('dir /b /ad-l "%Drive%\*"') do (
 
  call :ScanFolder "%Drive%\%%a"
 
  rem 2 level
  for /f "delims=" %%b in ('dir /b /ad-l "%Drive%\%%a\*"') do (
 
    rem Start recursive scanning on 2 level
    call :ScanFolder "%Drive%\%%a\%%b" /s
  )
)
 
del t.log t2.log
explorer ADS.log
pause
goto :eof
 
:ScanFolder [Path] [/s for recursive]
 
echo "%~1"
dir /r /a-l /-c %~2 "%~1\*" > t.log
echo Parsing ...
< t.log > t2.log findstr /r /c:":.*:" /c:"Содержимое папки" /c:"Directory of"
 
for /f "tokens=1-2*" %%a in (t2.log) do (
 
  if "%%a %%b"=="Содержимое папки" (
    set "Folder=%%c"
  ) else (
  if "%%a %%b"=="Directory of" (
    set "Folder=%%c"
  ) else (
  if %%a GTR %MAX_STREAM_SIZE% call :Log "%%a" "%%b %%c"
  ))
)
exit /b
 
:Log
echo %~1 "%Folder%\%~2" >> ADS.log
exit /b
Батник обязательно сохранять в кодировке OEM-866.
0
Вложения
Тип файла: zip ADS_Scanner.zip (868 байт, 29 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
17168 / 7222 / 865
Регистрация: 25.12.2011
Сообщений: 11,016
Записей в блоге: 16
21.12.2016, 23:08  [ТС] 132
Узнаём, сколько места занимают служебные файлы NTFS, невидимые в проводнике / и других файловых менеджерах.

Скрипт позволяет узнать объем файлов:
  • $Mft
  • $LogFile
  • $Volume
  • $AttrDef
  • $Bitmap
  • $Boot
  • $BadClus
  • $Secure
  • $UpCase
  • $Extend
Используется программа SysInternals Contig.

Использование:
распаковать, запустить батник Get_NTFS_Space.cmd от имени Администратора, получить отчет в файле $NTFS.log

Отчёт получается в такой форме:
Кликните здесь для просмотра всего текста

Processing C:\$Mft:
File size: 507248640 bytes
Processing C:\$Mft::$BITMAP:
File size: 61920 bytes
Processing C:\$Volume:
File size: 1859720839167 bytes
Processing C:\$AttrDef:
File size: 2560 bytes
Processing C:\$Secure::$ATTRIBUTE_LIST:
File size: 384 bytes
Processing C:\$Secure:$SDS:$DATA:
File size: 3604844 bytes
Processing C:\$Secure:$SDH:$INDEX_ALLOCATION:
File size: 393216 bytes
Processing C:\$Secure:$SII:$INDEX_ALLOCATION:
File size: 524288 bytes
Processing C:\$UpCase:
File size: 131072 bytes
Processing C:\$Extend:
File size: 0 bytes
1
Вложения
Тип файла: zip Get_NTFS_Space.zip (241.3 Кб, 29 просмотров)
greg zakharov
Покинул форум
2401 / 991 / 281
Регистрация: 07.05.2015
Сообщений: 1,991
22.03.2017, 14:27 133
hex2bin

Конвертер чисел из шестнадцатиричной системы счисления в бинарную (и обратно) с поддержкой интерактивного режима.
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
@echo off
  if /i "%~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
 
    echo:%~1|>nul findstr /irc:"[a-f,x]"&&(
      2>nil (set /a "dec=0%~1"||set /a "dec=0x%~1")&&(
        for /l %%i in (1, 1, 32) do (
          set /a "bit=dec&1, dec>>=1"
          set "bin=!bit!!bin!"
        )
        echo:!bin!
      )||goto:err
    )||(
      echo:%~1|>nul findstr /irc:"[3-9a-z]"&&goto:err
      set "bin=%~1"
      for /l %%i in (1, 1, 32) do (
        if defined bin (
          set /a "dec=(dec<<1)|!bin:~0,1!"
          set "bin=!bin:~1!"
        )
      )
      cmd /c exit /b !dec!& echo 0x!=exitcode!
    )
  endlocal
exit /b
 
:err
  echo:=^>err
exit /b
 
:box
  for %%i in (
    "%~n0 v1.01 - converts hex to binary and vice versa"
    "[Enter .c to clear output data or .q to exit]"
    ""
  ) do echo:%%~i
  setlocal
    set "run=true"
    :repeat
      set /p "i=>>> "
      cmd /c "%~f0" %i%
      if /i "%i%" equ ".c" cls
      if /i "%i%" equ ".q" goto:eof
      goto:repeat
  endlocal
exit /b
Пример использования:
Код
E:\sandbox> hex2bin.cmd A
00000000000000000000000000001010

E:\sandbox> hex2bin.cmd x10
00000000000000000000000000010000

E:\sandbox> hex2bin.cmd
hex2bin v1.01 - converts hex to binary and vice versa
[Enter .c to clear output data or .q to exit]

>>> 10000
0x00000010
>>> 11b
00000000000000000000000100011011
>>> 11111111
0x000000FF
>>> .q
=>err

E:\sandbox>
2
greg zakharov
Покинул форум
2401 / 991 / 281
Регистрация: 07.05.2015
Сообщений: 1,991
24.03.2017, 12:56 134
Календарь на текущий месяц

Пример того, как можно использовать robocopy не совсем по назначению. Временных файлов при этом не создается. Всецело протестировать не представляется возможным, так что фидбеки (отдельной темой) приветствуются.
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
@echo off
  setlocal
    for /f "tokens=3,4,5,7" %%i in (
      'robocopy . . $ /l /njh /nfl /ndl^
      ^| findstr /rc:"%time:~0,-3%"'
    ) do (
      set "dow=%%i" % rem : день недели
      set "mon=%%j" % rem : месяц
      set "day=%%k" % rem : день
      :: високосный?
      set "year=%%l"
    )
    set "d=31;28;31;30;31;30;31;31;30;31;30;31" % rem : количество дней в месяцах
    set /a "leap=!(year%%4)+(!!(year%%100)-!!(year%%400))"
    if %leap% equ 1 set "d=%d:8=9%" % rem : если високосный, корректируем февраль
    set "m=Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec"
    set "w=Mon;Tue;Wed;Thu;Fri;Sat;Sun"
    call:printcal
  endlocal
exit /b
 
:printcal
  setlocal enabledelayedexpansion
    :: всего дней в текущем месяце
    call:getindex "!m!" "!mon!"
    call:getdays  "!d!"
    :: день недели первого дня месяца
    call:getindex "!w!" "!dow!"
    for /l %%i in (!day!, -1, 1) do (
      if %%i neq 1 if !$_! equ 1 set "$_=8"
      set /a "$_-=1"
    )
    :: строка-заготовка календаря
    set "raw=Mo Tu We Th Fr Sa Su"
    for /l %%i in (1, 1, !$_!) do set "raw=!raw!   "
    for /l %%i in (1, 1, !$$!) do (
      if %%i lss 10 (
        set "raw=!raw!  %%i"
      ) else ( set "raw=!raw! %%i" )
    )
    :: бъем строку на блоки и выводим результат
    call:strlen "!raw!"
    echo:      !mon! !year!
    for /l %%i in (0, 21, !i!) do echo !raw:~%%i,20!
  endlocal
exit /b
 
:getdays
  set "i=0"
  for %%i in (%~1) do (
    set /a "i+=1"&if !i! equ !$_! set "$$=%%i"
  )
exit /b
 
:getindex
  set "i=0"
  for %%i in (%~1) do (
    set /a "i+=1"&if /i "%%i" equ "%~2" set "$_=!i!"
  )
exit /b
 
:strlen
  set "i=0"
  set "str=%~1"
  :repeat
    set "c=!str:~%i%,1!"
    if defined c set /a "i+=1"&goto:repeat
exit /b
Итог:
Код
E:\sandbox> cal.cmd
      Mar 2017
Mo Tu We Th Fr Sa Su
       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

E:\sandbox>
4
Maks
Модератор
Эксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
5535 / 2655 / 350
Регистрация: 13.03.2013
Сообщений: 11,187
Записей в блоге: 4
14.04.2017, 07:41 135
Предисловие: буквально на днях столкнулся с тем, что у довольно старенького ноута "села" батарейка на БИОС, в результате чего время постоянно слетало на 2011 год, из-за чего переставал работать скайп, антивирус, а интернет-браузеры "ругались" на нарушение безопасности и т.п.
В общем, батарейка на ноуте был специфическая, в городе таких не продавались, поэтому воткнул вот такие "костыли".
Создал два файла CMD:
timesync.cmd
Код
w32tm /resync
Синхронизирует время через интернет

timezone.cmd
Код
tzutil.exe /s "Ekaterinburg Standard Time"
Синхронизирует часовой пояс через интернет

Оба файла закинул в автозагрузку системы.
При активном "UAC" или при использовании иных ограничений текущего пользователя, можно создать задание в планировщике, выставить триггер "При запуске системы" и не забываем про галочку "Выполнять с наивысшими правами".
После чего при старте/перезагрузке системы время актуализировалось.
0
Dragokas
Эксперт WindowsАвтор FAQ
17168 / 7222 / 865
Регистрация: 25.12.2011
Сообщений: 11,016
Записей в блоге: 16
17.04.2017, 19:49  [ТС] 136
SystemDrive Folder NTFS privileges restorer by Alex Dragokas

Назначение:
Применяется, когда NTFS-права корня системного диска повреждены.
Примеры признаков:
  • отказ в доступе при записи в корень диска C:
Стандартные права


Формальное сокращенное описание (для быстрой оценки):
  • Пользователям из группы "администраторы" разрешается запись файлов в корень диска C: после прохождения проверки UAC.
  • Пользователям из групп "администраторы" и "пользователи" разрешается создание папок в корне диска C:.
Подробный список прав:
Кликните здесь для просмотра всего текста

Введите icacls %SystemDrive%\ для проверки.

Для Windows Vista / 7:
Код
BUILTIN\Администраторы:(F)
BUILTIN\Администраторы:(OI)(CI)(IO)(F)
NT AUTHORITY\система:(F)
NT AUTHORITY\система:(OI)(CI)(IO)(F)
BUILTIN\Пользователи:(OI)(CI)(RX)
NT AUTHORITY\Прошедшие проверку:(OI)(CI)(IO)(M)
NT AUTHORITY\Прошедшие проверку:(AD)
Обязательная метка\Высокий обязательный уровень:(OI)(NP)(IO)(NW)
Для Windows 8 / 8.1 / 10:
Код
BUILTIN\Администраторы:(OI)(CI)(F)
NT AUTHORITY\СИСТЕМА:(OI)(CI)(F)
BUILTIN\Пользователи:(OI)(CI)(RX)
NT AUTHORITY\Прошедшие проверку:(OI)(CI)(IO)(M)
NT AUTHORITY\Прошедшие проверку:(AD)
Обязательная метка\Высокий обязательный уровень:(OI)(NP)(IO)(NW)

Использование:
Распаковать архив.
Запустить файл "SysDrive Permissions Restorer.cmd" правой кнопкой мыши "От имени администратора".
Показать отчёт Perm_Log_U.log специалисту.

Пример лога с успешными операциями:


SystemDrive Folder NTFS privileges restorer script by Alex Dragokas (v.1.0)

Please wait ...

17.04.2017 - 19:24:06,49

Checking requirements
C:\Windows\System32\takeown.exe
C:\Windows\System32\icacls.exe
C:\Windows\System32\find.exe
OS:

Microsoft Windows [Version 6.1.7601]
SystemDrive is: C:
Имя тома:
Серийный номер тома: 0xa4780dd6
Максимальная длина компонентов: 255
Имя файловой системы: NTFS
Поддерживает учет регистров в именах файлов
Сохраняет имена файлов с учетом регистра
Поддерживает использование Юникода в именах файлов
Поддерживает обязательное использование списков доступа (ACL)
Поддерживает сжатие файлов
Поддерживает дисковые квоты
Поддерживает разреженные файлы
Поддерживает точки повторной обработки
Поддерживает идентификаторы объектов
Поддерживает шифрование на уровне файловой системы (EFS)
Поддерживает именованные потоки
Поддержка транзакций
Поддерживает жесткие ссылки
Поддерживает расширенные атрибуты
Поддерживает открытие по идентификатору файла
Поддерживает журнал USN

Backup
C:\ BUILTIN\Администраторы:(F)
BUILTIN\Администраторы:(OI)(CI)(IO)(F)
NT AUTHORITY\система:(F)
NT AUTHORITY\система:(OI)(CI)(IO)(F)
BUILTIN\Пользователи:(OI)(CI)(RX)
NT AUTHORITY\Прошедшие проверку:(OI)(CI)(IO)(M)
NT AUTHORITY\Прошедшие проверку:(AD)
Обязательная метка\Высокий обязательный уровень:(OI)(NP)(IO)(NW)
Успешно обработано 1 файлов; не удалось обработать 0 файлов
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов
ACL backup stored in: "C:\Users\tfcor\Desktop\SysDrive.acl"

Changing owner

Успех. Владельцем файла (или папки) "C:" является группа администраторов.

Removing 'deny' privileges

>>> icacls C:\ /remove:d "BUILTIN\Администраторы"
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /remove:d "BUILTIN\Администраторы"
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /remove:d "NT AUTHORITY\система"
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /remove:d "NT AUTHORITY\система"
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /remove:d "BUILTIN\Пользователи"
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /remove:d "NT AUTHORITY\Прошедшие проверку"
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /remove:d "NT AUTHORITY\Прошедшие проверку"
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /remove:d "Обязательная метка\Высокий обязательный уровень"
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /remove:d "шно обработано 1 файлов; не удалось обработать 0 файлов"
Успешно обработано 0 файлов; не удалось обработать 0 файлов

Restoring privileges
Applying Window 7 template...

>>> icacls C:\ /grant:r *S-1-5-32-544:(F)
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /grant:r *S-1-5-32-544:(OI)(CI)(IO)(F)
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /grant:r *S-1-5-18:(F)
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /grant:r *S-1-5-18:(OI)(CI)(IO)(F)
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /grant:r *S-1-5-32-545:(OI)(CI)(RX)
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /grant:r *S-1-5-11:(OI)(CI)(IO)(M)
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

>>> icacls C:\ /grant:r *S-1-5-11:(AD)
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

Setting integrity level

>>> icacls C:\ /setintegritylevel (OI)(IO)(NP)H
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

Restoring owner

>>> icacls C:\ /setowner *S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464
обработанный файл: C:\
Успешно обработано 1 файлов; не удалось обработать 0 файлов

List of new permissions
C:\ BUILTIN\Администраторы:(F)
BUILTIN\Администраторы:(OI)(CI)(IO)(F)
NT AUTHORITY\система:(F)
NT AUTHORITY\система:(OI)(CI)(IO)(F)
BUILTIN\Пользователи:(OI)(CI)(RX)
NT AUTHORITY\Прошедшие проверку:(OI)(CI)(IO)(M)
NT AUTHORITY\Прошедшие проверку:(AD)
Обязательная метка\Высокий обязательный уровень:(OI)(NP)(IO)(NW)
Успешно обработано 1 файлов; не удалось обработать 0 файлов

LogFile stored in: "C:\Users\tfcor\Desktop\Perm_Log_U.log"

Script is finished.
Show this logfile to helper.

Работа скрипта завершена.
Покажите этот отчёт специалисту.

Совместимость:
Windows 10 / 8.1 / 8 / 7 / Vista

Примечание:
Скрипт не удаляет разрешающие привилегии. Если у Вас установлены лишние привилегии разрешения доступа, Вам придётся удалять их самостоятельно.

Код батника

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
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
echo.
echo SystemDrive Folder NTFS privileges restorer script by Alex Dragokas (v.1.0)
echo.
echo Please wait ...
 
cd /d "%~dp0"
prompt ^>^>^> 
 
if "%~1"=="" (
  echo. 1>&3 2>&4 3>Perm_Log.log 4>&3
  call "%~fs0" 0
  exit /b
)
 
echo.
echo %date% - %time%
echo.
echo Checking requirements
net session >NUL 2>NUL || (
  echo Admin. privileges required.
  echo Run this bat-file by right mouse click and choose "Run as administrator".
  echo.
  echo Требуются привилегии администратора.
  echo Запустите этот бат-файл правой кнопкой мыши и выберите "Запуск от имени администратора".
  goto log
)
 
where takeown || (echo takeown.exe utility is not found & goto log)
where icacls  || (echo icacls.exe  utility is not found & goto log)
where find    || (echo find.exe    utility is not found & goto log)
 
echo OS:
set "bWin10="
set "bWin8="
set "bWin7="
set "bWinVista="
ver
ver |>NUL find "10." && set bWin10=true
ver |>NUL find "6.4" && set bWin10=true
ver |>NUL find "6.3" && set bWin8=true
ver |>NUL find "6.2" && set bWin8=true
ver |>NUL find "6.1" && set bWin7=true
ver |>NUL find "6.0" && set bWinVista=true
if not defined bWin10 if not defined bWin8 if not defined bWin7 if not defined bWinVista (echo Script is intended for Windows Vista/7/8/8.1/10 only. Terminated. & goto log)
 
echo SystemDrive is: %SystemDrive%
fsutil fsinfo volumeinfo %SystemDrive%
 
echo.
echo Backup
for /f "delims=" %%a in ('icacls %SystemDrive%\') do echo %%a
icacls %SystemDrive%\ /save SysDrive.acl
echo ACL backup stored in: "%~dp0SysDrive.acl"
 
echo.
echo Changing owner
takeown /A /F %SystemDrive%\
 
echo.
echo Removing 'deny' privileges
echo on
@for /f "delims=" %%a in ('icacls %SystemDrive%\') do @(
  @set "S=%%a"
  @for /f "delims=:" %%b in ("!S:~4!") do icacls %SystemDrive%\ /remove:d "%%b"
)
 
@echo.
@echo Restoring privileges
@if defined bWinVista call :doWin7
@if defined bWin7 call :doWin7
@if defined bWin8 call :doWin8
@if defined bWin10 call :doWin8
@goto finalize
 
:doWin7
@echo Applying Window 7 template...
:: BUILTIN\Administrators
icacls %SystemDrive%\ /grant:r *S-1-5-32-544:(F)
icacls %SystemDrive%\ /grant:r *S-1-5-32-544:(OI)(CI)(IO)(F)
:: NT AUTHORITY\SYSTEM
icacls %SystemDrive%\ /grant:r *S-1-5-18:(F)
icacls %SystemDrive%\ /grant:r *S-1-5-18:(OI)(CI)(IO)(F)
:: BUILTIN\Users
icacls %SystemDrive%\ /grant:r *S-1-5-32-545:(OI)(CI)(RX)
:: NT AUTHORITY\Authenticated Users
icacls %SystemDrive%\ /grant:r *S-1-5-11:(OI)(CI)(IO)(M)
icacls %SystemDrive%\ /grant:r *S-1-5-11:(AD)
@exit /b
 
:doWin8
@echo Applying Window 8 template...
:: BUILTIN\Administrators
icacls %SystemDrive%\ /grant:r *S-1-5-32-544:(OI)(CI)(F)
:: NT AUTHORITY\SYSTEM
icacls %SystemDrive%\ /grant:r *S-1-5-18:(OI)(CI)(F)
:: BUILTIN\Users
icacls %SystemDrive%\ /grant:r *S-1-5-32-545:(OI)(CI)(RX)
:: NT AUTHORITY\Authenticated Users
icacls %SystemDrive%\ /grant:r *S-1-5-11:(OI)(CI)(IO)(M)
icacls %SystemDrive%\ /grant:r *S-1-5-11:(AD)
@exit /b
 
:finalize
@echo.
@echo Setting integrity level
:: Обязательная метка\Высокий обязательный уровень
icacls %SystemDrive%\ /setintegritylevel (OI)(IO)(NP)H
 
@echo.
@echo Restoring owner
icacls %SystemDrive%\ /setowner *S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464
 
@echo off
echo.
echo List of new permissions
for /f "delims=" %%a in ('icacls %SystemDrive%\') do echo %%a
echo.
echo LogFile stored in: "%~dp0Perm_Log_U.log"
echo.
echo Script is finished.
echo Show this logfile to helper.
echo.
echo Работа скрипта завершена.
echo Покажите этот отчёт специалисту.
 
:log
cmd /u /c type Perm_Log.log > Perm_Log_U.log
notepad Perm_Log_U.log
1
Вложения
Тип файла: zip SysDrive Permissions Restorer.zip (1.6 Кб, 16 просмотров)
alpap
26.05.2017, 10:39
  #137

Не по теме:

Давайте будем штрафовать очень больно за вопросы не по теме в информационно-избранные разделы!

0
svonjoi
0 / 0 / 0
Регистрация: 14.09.2017
Сообщений: 1
15.09.2017, 22:28 138
код на мас адрес не работает, возвращает нули. айпи и шлюз норм
windows 7
0
Dragokas
Эксперт WindowsАвтор FAQ
17168 / 7222 / 865
Регистрация: 25.12.2011
Сообщений: 11,016
Записей в блоге: 16
16.09.2017, 10:34  [ТС] 139
svonjoi,

Цитата Сообщение от Dragokas Посмотреть сообщение
В этой теме выкладываем скрипты, которые часто используются Вами
или на Ваш взгляд могут иметь большое практическое значение.
Внимательно читайте первый пост. Там есть ответы на все ваши вопросы.
1
vavun
10495 / 5459 / 859
Регистрация: 07.04.2013
Сообщений: 15,663
06.01.2018, 03:18 140
Вывод даты в формате ISO 8601 вне зависимости от региональных настроек системы и настроек формата вывода даты

ИСТОЧНИК
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
@Echo off
:: Check WMIC is available
WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_error
 
:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
   IF "%%~L"=="" goto s_done
      Set _yyyy=%%L
      Set _mm=00%%J
      Set _dd=00%%G
      Set _hour=00%%H
      SET _minute=00%%I
)
:s_done
 
:: Pad digits with leading zeros
      Set _mm=%_mm:~-2%
      Set _dd=%_dd:~-2%
      Set _hour=%_hour:~-2%
      Set _minute=%_minute:~-2%
 
:: Display the date/time in ISO 8601 format:
Set _isodate=%_yyyy%-%_mm%-%_dd% %_hour%:%_minute%
Echo %_isodate%
 
GOTO:EOF
 
:s_error
Echo GetDate.cmd
Echo Displays date and time independent of OS Locale, Language or date format.
Echo Requires Windows XP Professional, Vista or Windows 7
1
06.01.2018, 03:18
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2018, 03:18

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

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

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

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

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


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

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

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