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

Batch (CMD/BAT)

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

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

15.10.2012, 00:56. Просмотров 299183. Ответов 158

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

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

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

Другое
Расчёт индекса массы тела и идеального веса ссылка
18
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2012, 00:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Полезные BAT/CMD скрипты (CMD/BAT):

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

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

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

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

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

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

158
Dragokas
Эксперт WindowsАвтор FAQ
16600 / 6985 / 845
Регистрация: 25.12.2011
Сообщений: 10,781
Записей в блоге: 16
15.10.2012, 00:57  [ТС] #2
Взаимное копирование содержимого 2 папок друг в друга

Критерий копирования при совпадении имен файлов: последняя дата модификации.

Использование:
Сохранить в файл Мое_Название_файла.CMD
Скопировать файл в папку № 1.
Перетянуть папку № 2 на этот сценарий.

Примечание: скрипт использует Robocopy.exe из пакета Windows Resource Kit (является родной для Windows 7)

Развернуть код ...
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@echo off
setlocal enabledelayedexpansion
set "cat=%~dp0"
set "cat=!cat:~0,-1!"
color 9E
echo                    by Alex Drago.kas
echo.
echo.
echo Реверсивная синхронизация файлов/папок.
echo.
echo Вам нужно объеденить содержимое двух папок так,
echo чтобы взаимозаменить новые файлы по дате модификации,
echo а также добавить новые?
echo.
echo.
:: 1. Поместите сценарий в папку № 1
:: 2. Опустите папку № 2 на этот сценарий.
if (%1)==() goto :noCat
echo.
echo Будут взаимообъединены файлы и папки в каталогах:
echo 1. !cat!
echo 2. %1
echo.
pause
robocopy "!cat!" "%1" /s /fft
robocopy "%1" "!cat!" /s /fft
echo.
echo Объединение завершено.
echo.
pause
goto :eof
 
:noCat
echo Не задана папка № 2 ...
echo ---------------------------------
echo 1. Поместите сценарий в папку № 1
echo 2. Опустите папку № 2 на этот сценарий.
echo.
pause
1
Вложения
Тип файла: zip Dual_Synhro.zip (586 байт, 491 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16600 / 6985 / 845
Регистрация: 25.12.2011
Сообщений: 10,781
Записей в блоге: 16
15.10.2012, 02:41  [ТС] #3
Удаление последствий вируса (поддельные "фейковые" папки на флешке)
19.11.2012 - Критическое обновление (запускать скрипт "от имени Администратора" теперь безопасно).
Автор: Dragokas

Использование:
Скопировать в корень съемного диска (USB Flash Drive).
Запустить.

Показания к применению:
Ваша флешка побывала на компьютере с вирусом, скрывающим папки, а вместо них - теперь ярлыки.
Вы хотите, чтобы на флешке физически нельзя было создать autorun.inf, который дает команду на запуск паразитов.

Функционал v.1.5.:
1. Удаление файлов с расширением *.lnk (ярлыки), соответствующих именам папок.
1.1. Удаление других *.lnk с запросом подтверждения от пользователя.
2. Снятие атрибутов "скрытый", "системный" с папок в корне флешки.
3. Удаление файла автозапуска "autorun.inf".
4. Создание папки "autorun.inf" (контр-мера против дальнейшей возможности создавать файл autorun.inf)
Папка содержит в свою очередь 3 неудаляемые штатными способами подпапки, создаваемые разными алгоритмами.
(папка с 2 точками на конце, папка с именем системного устройства и папка с измененными ACL-правами доступа).

5. Удаление всех файлов с расширением *.exe в корне папки C:\Users\Пользователь\AppData\Roaming (%appdata%) - это безопасно.
6. Завершение процесса Host.exe. Поиск и удаление рекурсивно всех файлов Host.exe (все действия с подтверждением от пользователя).
7. Удаление модифицированных системных папок "recycled" и "System Volume Information" без подтверждения.
(удаление папки корзины Windows ("recycler") на оперируемом томе происходит с подтверждением).
8. Удаление дополнительных обычно вирусных файлов (System, Game.cpl) в режиме подтверждения.

Тонкости:
Учитываются особенности работы с именами, где используются буквы украинского алфавита и др. спецсимволы.
Если удаление не происходит с первого раза предпринимается попытка получить права на объект и сменить владельца.
Если и это не получается сделать, производится попытка удалить папку/файл в обход ограничений API-функций Windows на имена.

Основные изменения в update 1.5. (от 16.11.2012)
Исправлены ошибки с кавычками и др. недочеты.
Скрипт спрашивает разрешения и ничего лишнего точно не удалит.
Более быстрая работа.
Добавлена визуализация и %-ый прогрессбар.

Обсуждение скрипта ведется здесь (и последняя версия скрипта тоже): AntiHidden - Удаление последствий вируса (поддельные "фейковые" папки на флешке)


FAQ

Как удалить созданную программой папку Autorun.inf
- Не скажу А вообще проще отформатировать флешку

Программа работает слишком долго:
- Вероятно много папок/файлов или за Вами очень внимательно следит антивирус

Зачем удалять программы в корне папки %appdata% ?
- Некоторые вирусы, скрывающие папки, хранят свое тело в папке %appdata%
Другие пользовательские или системные программы в корне этой папки никогда не хранятся.


Листинг исходного кода v.1.5.1. ua:

В коде версии 1.5. использованы спецсимволы BackSpace, поэтому при прямом копировании кода Ваш батник работать не будет, как задумано.
(скачивайте через прикрепленный файл).

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
@echo off
Setlocal EnableDelayedExpansion EnableExtensions
mode con: cols=82 lines=30
title Anti Hidden Fast - Видалення наслiдкiв вiрусної дiяльностi ver.1.5.1
color 1a
echo                                        Maded by Alex Drago.kas -=2012=-
echo   Anti Hidden Fast v.1.5.1                     -= Зроблено в Українi :)
echo.
echo   Етап 1. Вiдновлення властивостей корневих папок.
echo.
echo   Будуть встановленi такi параметри:
echo   - не "Прихований"
echo   - не "Системний"
echo   + стати власником
echo   + надати повнi права
echo.
echo   Для прискорення операцiї можна тимчасово вимкнути антивiрусне ПЗ.
 
Call :StrOne "  Працюю з папкою:  "
<nul set /p text=%%
Call :StrOne " " new
 
Set Cur=%~dp0
Set Cur=%Cur:~0,-1%
 
::Оценка количества папок для прогресс-бара, запись первой порции папок в массив (Hidden)
chcp 1251>nul
for /f "delims=" %%i in ('dir "%Cur%" /b /a:dh 2^>nul') do (set /a folders+=1& Set F.!folders!=%Cur%\%%i)
 
chcp 866>nul
for /L %%A in (1,1,%folders%) do (
  set /a Progress=100*%%A/%folders%
  Call :StrOne "!Progress! - !F.%%A!"
  Call :RecovFolder "!F.%%A!"
)
 
chcp 1251>nul
for /f "delims=" %%i in ('dir "%Cur%" /b /a:ds 2^>nul') do (
   Call :StrOne "*** - %%i"
   Call :RecovFolder "%Cur%\%%i"
)
chcp 866>nul
Call :StrOne "100 - завершено.                                                                "
echo.
 
echo   Етап 2. Видалення зайвих ярликiв.
::chcp 1251>nul
::Удаление только ярлыков, имена которых соответствуют именам папок
for /f "delims=" %%i in ('dir "%Cur%" /b /a:d') do if exist "%Cur%\%%i.lnk" (
  call :killfile "%Cur%\%%i.lnk"
)
chcp 866>nul
 
echo   Етап 3. Блокування стороннiх активних процесiв та видалення їх джерела.
if exist %appdata%\*.exe (
  for /f "delims=" %%i in ('dir %appdata%\*.exe /b /a') do taskkill /im "%%i" /t /f
  call :killfile "%appdata%\*.exe"
)
 
echo   Етап 4. Видалення файлу автозапуску.
if not exist "%Cur%\autorun.inf\" if exist "%Cur%\autorun.inf" call :killfile "%Cur%\autorun.inf"
 
echo   Етап 5. Видалення модифiкованих системних папок i чужорiдних файлiв.
for %%a in ("recycled" "System Volume Information") do (
  if exist "%Cur%\%%~a\" Call :KillFolder "%Cur%\%%~a")
) 1>nul 2>&1
if exist "%Cur%\recycler\" (
  echo   Знайдено папку Recycler. Продовжити видалення корзини Windows для тому %~d0 ? 
  Set /p RecycleRemove="Натиснiть "Y" та кнопку {ENTER} "
  Echo.!RecycleRemove!|>nul find /i "y"&&Call :KillFolder "%Cur%\recycler"
)
 
for %%b in (game.cpl system *.lnk) do for /F "delims=" %%a in ('2^>nul dir "%Cur%\%%b" /b /a:-d') do (
  echo.
  echo Знайдено пiдозрiлий файл - %%a. 
  echo Для видалення натиснiть "Y" та кнопку {ENTER}
  (takeown /f "%Cur%\%%a"&echo y|cacls "%Cur%\%%a" /g %username%:f) 1>nul 2>&1
  del /f /p /A "%Cur%\%%a"
)
 
echo.
color 1b
echo   Етап 5.1. Пошук i видалення файлiв host.exe. Будь ласка, чекайте...
tasklist |1>nul 2>&1 FindStr /B /L /I /C:host.exe&&(
  Echo   В системi запущено пiдозрiлий процес Host.exe
  Set /p HostClose="  Завершити його? - натиснiть Y та {ENTER}"
  Echo.!HostClose!|>nul find /i "y"&&taskkill /im "host.exe" /t /f
)
(for /f "tokens=*" %%a in ('Dir /b /s /a:-d "%Cur%\host.exe"') Do (
  if not Defined HostAgree (
    Echo   Всi файли з iм'ям Host.exe будуть видаленi з носiя %~dp0% рекурсивно.
    Set /p HostAgree="Щоб продовжити натиснiть Y та {ENTER}"
    Echo.!HostAgree!|>nul find /i "y"||Goto :ExtHostSeek
  )
  Call :KillFile "%%a"
)) 2>nul
:ExtHostSeek
 
color 1a
echo   Етап 6. Створення захисного файлу автозапуску, що не видаляється
echo           штатними засобами.
if not exist "%Cur%\autorun.inf\" mkdir "%Cur%\autorun.inf" 1>nul 2>&1
if not exist "%Cur%\autorun.inf\Dragokas..\" mkdir "%Cur%\autorun.inf\Dragokas..\" 1>nul 2>&1
if not exist "%Cur%\autorun.inf\com1\" mkdir "\\?\%Cur%\autorun.inf\com1" 1>nul 2>&1
if not exist "%Cur%\autorun.inf\defence" (
  mkdir "%Cur%\autorun.inf\defence" 1>nul 2>&1
  echo y|1>nul 2>&1 cacls "%Cur%\autorun.inf\defence" /d Все
  echo y|1>nul 2>&1 cacls "%Cur%\autorun.inf\defence" /d All
)
 
echo.
echo Процедуру проведено. Програму буде закрито.
ping -n 3 localhost 1>nul 2>&1
color
goto :eof
 
:RecovFolder
attrib -s -h "%~1" 1>nul 2>&1
attrib "%~1"|>nul FindStr /BIR "....H.."
if %errorlevel%==0 (
    Call :GrantAccess "%~1"
    attrib -s -h "%~1" 1>nul 2>&1
  ) else (
  attrib "%~1"|>nul FindStr /BIR "...S..."&&(
    Call :GrantAccess "%~1"
    attrib -s -h "%~1" 1>nul 2>&1
    )
)
exit /b
 
:GrantAccess
takeown /f "%~1" /r /d y 1>nul 2>&1
echo y|cacls "%~1" /g %username%:f 1>nul 2>&1
exit /b
 
:KillFile
attrib -s -h "%~1" 1>nul 2>&1
del /F /Q "%~1" 1>nul 2>&1
if exist "%~1" (
  takeown /f "%~1"
  echo y|cacls "%~1" /g %username%:f
  del /F /Q /A "%~1"
) 1>nul 2>&1
if exist "%~1" (
  del /F /Q /A "\\?\%~1"
) 1>nul 2>&1
exit /b
 
:KillFolder
attrib -s -h "%~1" 1>nul 2>&1
rd /S /Q "%~1" 1>nul 2>&1
if exist "%~1" (
  takeown /f "%~1" /r /d y
  echo y|cacls "%~1" /g %username%:f
  rd /S /Q "%~1"
) 1>nul 2>&1
if exist "%~1" (
  rd /S /Q "\\?\%~1"
) 1>nul 2>&1
exit /b
 
:StrLen
::Вычисляет длину переменной.
::Результат записывается в переменную LastLen
set strString=%~1
set /a LastLen = 0
::Максимальная длина переменной = 1024 символа
for /l %%i in (0,1,1024) do (
  set strTempString=!strString:~%%i,1!
  if "!strTempString!" neq "" (
    set /a LastLen+=1
  )
)
exit /b 0
 
:StrOne
::%1 - строка, которую отображаем
::%2 - параметры:
::new - печатать рядом
::vblf - печатать с новой строки
::если опущен, то заменять предыдущий текст.
if "%2"=="new" (set /a conWidth-=%LastLen%& call :StrWrite "%~1" New& exit /b 0)
if "%2"=="crlf" (call :GetConsoleWidth& echo.&call :StrWrite "%~1" New& exit /b 0)
::если предыдущего текста не было, просто печатаем текст и записываем его длину
if not defined LastLen (call :GetConsoleWidth& call :StrWrite "%~1" New& exit /b 0)
::Переменная с БекСпейсами
Set BS=
::Набиваем нужным количеством БекСпейсов
for /l %%i in (1,1,%LastLen%) do (Set BS=!BS!)
::Возвращаем каретку назад
<nul set /p text=%BS%
Set /a LenBefore=%LastLen%
::Печатаем текст поверх старого
Call :StrWrite "%~1" Fill
::Если новый текст короче старого, нужно затереть оставшиеся символы
if %LenBefore% GTR %LastLen% (
  set Space=
  set /a n=%LenBefore%-%LastLen%
  rem Набиваем Space слева пробелами, а справа возратом каретки
  rem Нужно ее ведь затем вернуть в пред. позицию
  for /l %%i in (1,1,!n!) do (Set Space= !Space!)
  rem Знак подчеркивания + BackSpace здесь я использую для обхода ограничения
  rem т.к. иначе, если в начале строки мы захотим напечатать пробел - это не получится сделать
  rem Команда (<nul set /p text= Текст) выведет "Текст" без пробела!
  (<nul set /p text=_!Space!)
)
exit /b 0
 
:StrWrite
::Вычисляем длину напечатанной строки
Call :StrLen "%~1"
::Определяем поместится ли по ширине консоли
Set Text=%~1
if %LastLen% GTR %conWidth% (
  call set Text=!Text:~0,%conWidth%!
  set /a LastLen=%conWidth%
)
::Печатаем текст на той же строке
<nul set /p text=_%Text%
::Обнуляем переменную длины предыдущей строки
if "%2"=="New" set /a LenBefore=0
exit /b 0
 
:GetConsoleWidth
::Получение ширины консоли
For /F "skip=4 tokens=1,2" %%v In ('mode con') Do (
  Set /A conWidth=%%w-4
  Exit /B
)


Add. Перевод на русский v.1.4.:
Листинг (с переводом).
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
@echo off
title Anti Hidden Fast - Удаление следов вирусной деятельности ver.1.4
color 1a
echo                                        Maded by Alex Drago.kas -=2012=-
echo   Anti Hidden Fast v.1.4                       -= Сделано в Украине :)
echo.
echo   Этап 1. Возобновление свойств корневых папок.
echo.
echo   Будут установлены такие параметры:
echo   - не "Скрытый"
echo   - не "Системный"
echo   + стать собственником
echo   + предоставить полные права
echo.
echo   Для ускорения операции можно временно отключить антивирусное ПО.
chcp 1251>nul
for /f "delims=" %%i in ('dir /b /a:d') do (
for /f "delims={;}" %%s in ('attrib "%%i"') do (call :oper "%%s" "%%i")
)
chcp 866>nul
echo.
echo   Этап 2. Удаление лишних ярлыков.
 
chcp 1251>nul
for /f "delims=" %%i in ('dir /b /a:d') do if exist %%i.lnk call :killfile %%i.lnk
chcp 866>nul
 
echo   Этап 3. Блокирование сторонних активных процессов и удаление их источника.
if exist %appdata%\*.exe (
for /f "delims=" %%i in ('dir %appdata%\*.exe /b /a') do taskkill /im "%%i" /t /f
call :killfile %appdata%\*.exe
)
 
echo   Этап 4. Удаление файла автозапуска.
if not exist autorun.inf\ if exist autorun.inf call :killfile autorun.inf
::echo.
echo   Этап 5. Удаление модифицированных системных папок и инородных файлов.
for %%a in ("recycled" "recycler" "System Volume Information") do (
if exist %%a (takeown /f %%a /r /d y&echo y|cacls %%a /g %username%:f&attrib -s -h %%a&rd /s /q %%a)
) 1>nul 2>&1
for %%a in (game.cpl system) do (if exist %%a (
echo.
echo Найдено подозрительный файл - %%a. 
echo Для удаления нажмите "Y" и кнопку {ENTER}
(takeown /f %%a&echo y|cacls %%a /g %username%:f&&attrib -s -h %%a) 1>nul 2>&1
del /f /p %%a
))
echo.
color 1b
::echo   Этап 5.1. Поиск и удаление файлов host.exe. Пожалуйста, подождите...
tasklist |1>nul 2>&1 FindStr /B /L /I /C:host.exe&&taskkill /im "host.exe" /t /f
(for /f "tokens=*" %%a in ('Dir /b /s /a:-d host.exe') Do (
attrib -s -h "%%a" 1>nul 2>&1
del /f /q "%%a" 1>nul 2>&1
)) 2>nul
 
color 1a
echo   Этап 6. Создание защитного файла автозапуска, который не удаляется
echo           штатными средствами.
if not exist autorun.inf\ mkdir autorun.inf 1>nul 2>&1
if not exist autorun.inf\defence..\ mkdir autorun.inf\defence..\ 1>nul 2>&1
if not exist autorun.inf\com1\ mkdir "\\?\%~d0\autorun.inf\com1" 1>nul 2>&1
if not exist autorun.inf\123 (
mkdir autorun.inf\123 1>nul 2>&1
echo y|1>nul 2>&1 cacls "123" /d Все
echo y|1>nul 2>&1 cacls "123" /d All
)
echo.
echo Процедура проведена. Программа будет закрыта.
ping -n 3 localhost 1>nul 2>&1
color 07
goto :eof
 
:oper
echo %1|>nul FindStr /BIR ".....H."&&attrib -s -h %2 1>nul 2>&1
echo %1|>nul FindStr /BIR ".....H."&&(
takeown /f %2 /r /d y 1>nul 2>&1
echo y|>nul cacls %2 /g %username%:f
attrib -s -h %2 1>nul 2>&1
)
exit /b
 
:killfile
(attrib -s -h %1
del /F /Q %1||(takeown /f %1&echo y|cacls %1 /g %username%:f&&attrib -s -h %1&&del /F /Q %1)
) 1>nul 2>&1
5
Вложения
Тип файла: rar Anti_Hidden_fast_ua_v.1.5.1.rar (3.1 Кб, 1123 просмотров)
Тип файла: rar Anti_Hidden_fast_ru_v.1.5.1.rar (3.0 Кб, 1982 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16600 / 6985 / 845
Регистрация: 25.12.2011
Сообщений: 10,781
Записей в блоге: 16
15.10.2012, 02:44  [ТС] #4
Стать владельцем папки/файла, получить полные права (пункт контекстного меню)

Скрипт представляет из себе ключик реестра.
Установка:
Сохранить код в файл с расширением .REG
Запустить Reg-ключ и подтвердить импорт в реестр.

Использование:
Правый клик по нужному файлу/папке, выбрать "Стать владельцем и задать полный доступ к объекту".

Предназначение:
Назначает Вас владельцем указанной папки (файла).
"Сбрасывает" его/ее ACL-таблицу.

Показания к применению:
При попытке файловой операции над файлом/папкой появляется сообщение "У Вас недостаточно прав для выполнения данной операции". Бывает, когда копируете данные с другого компьютера.
Прим.: данное средство не позволяет переназначить права, если требуемый файл находится вне целевого компьютера (в локальной сети).

Ключик Nizaury Reg-Key Листинг:
Код
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\runas]
@="Стать владельцем и задать полный доступ к объекту"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\*\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant администраторы:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant администраторы:F"

[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="Стать владельцем и задать полный доступ к объекту"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant администраторы:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant администраторы:F /t"

Автор: Nizaury

Смежный скрипт: Смена владельца и прав на папку и ее содержимое, в которой запущен батник
10
Вложения
Тип файла: zip Full_access.zip (403 байт, 1300 просмотров)
Anonymоus
611 / 91 / 14
Регистрация: 15.08.2012
Сообщений: 62
15.10.2012, 05:16 #5
Подсчёт маски подсети на основании двух крайних значений диапазона.

Синтаксис - netmask.cmd <начало диапазона> <конец диапазона>
Вызов из другого скрипта - см. комментарии.

Развернуть код ...
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
@Echo Off
:: Subnet mask from IP range
:: Inquisitor, 2012
:: Distributed under GNU GPL v2 license
:: [url]http://www.gnu.org/licenses/gpl-2.0.html[/url]
SetLocal EnableDelayedExpansion
Set NetworkHostBoundary=false
Set NetMask=
 
:: Если вызывается не из консоли, а из другого батника,
:: вызывать нужно из цикла for для корректной работы
:: Пример:
rem For /F %%A In ('netmask.cmd 192.168.1.0 192.168.8.255') Do Echo %%A
 
:: Проверка на запуск с аргументами
:: Если без аргументов - пример использования и выход
If "%*"=="" (Echo USAGE: %~nx0 192.168.1.0 192.168.3.255&GoTo :EOF)
 
:: Разбор входящих аргументов, cравнение начального и конечного
:: адресов по октетам
For /F "tokens=1-8 delims=. " %%A In ("%*") Do (
    Call :Mask %%A %%E
    Call :Mask %%B %%F
    Call :Mask %%C %%G
    Call :Mask %%D %%H
)
:: Вывод в stdout результата и выход, раскомментировать нужное
:: Вывод _БЕЗ_ перевода строки
<Nul Set /P Echo=!NetMask!
:: Вывод _С_ переводом строки
rem Echo !NetMask!
GoTo :EOF
 
 
:DEC2BIN
:: Функция перевода числа из десятеричной системы в двоичную
:: Принимает один аргумент, результат возвращается в %Result%
Set Result=
Set Data=%~1
:d2b_loop
:: Проверяем, есть ли остаток от деления
Set /A x1=Data/2
Set /A x2=x1*2
If "%x2%"=="%Data%" (Set Mod=0) Else (Set Mod=1)
:: Устанавливаем в качестве входных данных результат деления
Set Data=%x1%
:: Пишем результат поразрядно, в обратном порядке
Set Result=%Mod%%Result%
:: Следующая итерация или выход после окончания
If Not "%x1%"=="0" GoTo d2b_loop
:: Перед выходом - дополнение ведущими нулями до двух в восьмой
:: Требуется для корректного сравнения двух чисел без сдвига
Call :LeadingZero %Result%
GoTo :EOF
 
:BIN2DEC
:: Функция перевода числа из двоичной системы в десятеричную
:: Принимает один аргумент, результат возвращается в %Result%
Set Result=
:: Значение -1 для начала значения счетчика с нуля
Set i=-1
Set Data=%1
:b2d_loop
:: Получаем текущий разряд числа
Set /A i+=1
Set x1=%Data:~-1%
:: Используем бинарный сдвиг для получения степени двойки
Set /A x2="x1 * (1 << i)"
:: Добавляем к результату
Set /A Result+=%x2%
:: Следующая итерация или выход после окончания
If Not "%Data:~,-1%"=="" (Set Data=%Data:~,-1%&GoTo b2d_loop)
GoTo :EOF
 
:LeadingZero
:: Дополнение ведушими нулями до двух в восьмой (один байт)
:: Принимает один аргумент, результат возвращается в %Result%
Set Result=
Set Data=%~1
For /L %%A In (1,1,8) Do (
    If Not "!Data!"=="" (
        Set Result=!Data:~-1!!Result!
        Set Data=!Data:~,-1!
    ) Else (
        Set Result=0!Result!
    )
) 
GoTo :EOF
 
:FastCompare
:: Быстрое сравнение, если найдены различия - вызывается функция
:: более детального сравнения для поиска самого различия
:: Принимает два аргумента, результат возвращается в %Result%
If Not !NetworkHostBoundary!==true (
    If "%1"=="%2" (
        Set Result=11111111
        GoTo :EOF
    ) Else (
        Call :Compare %1 %2
    )
) Else (
    Set Result=00000000
)
GoTo :EOF
 
:Compare
:: Сравнение двух однобайтных чисел поразрядно, локализация начала различий
:: и забивание всего после первого различия нулями
:: Принимает два аргумента, результат возвращается в %Result%
:: Ведущие нули у обоих чисел обязательны
Set x1=%1&Set x2=%2
Set Result=
For /L %%A In (1,1,8) Do (
:: Получение ведущего разряда от каждого из чисел
    Set n1=!x1:~,1!
    Set n2=!x2:~,1!
:: Сравнение двух чисел и инвертирование бита
    Set /A Data="1 ^ (n1 ^ n2)"
:: Установка флага начала различия
    If !Data!==0 Set NetworkHostBoundary=true
:: Обнуление всех последующих после различия разрядов
    If !NetworkHostBoundary!==true Set Data=0
:: Поразрядная запись результата
    Set Result=!Result!!Data!
:: Устанавливаем остаток в качестве входных данных для следующей итерации
    Set x1=!x1:~1!
    Set x2=!x2:~1!
)
GoTo :EOF
 
:Mask
:: Генерация одного октета маски
:: Принимает два аргумента, результат дописывается к %NetMask%
Call :DEC2BIN %1&&Set From=!Result!
Call :DEC2BIN %2&&Set To=!Result!
Call :FastCompare !From! !To!
Call :BIN2DEC !Result!
If "!NetMask!"=="" (Set NetMask=!Result!) Else (Set NetMask=!NetMask!.!Result!)
GoTo :EOF


UPD. 26.04.13
Изменения: переписан вывод помощи и добавлен ключ для вывода маски в формате CIDR.

Использование:
netmask <начальный IP диапазона> <конечный IP диапазона>
netmask <начальный IP диапазона> <конечный IP диапазона> cidr

Примеры:
Bash
1
2
netmask 195.189.120.0 195.189.123.255 = 255.255.252.0
netmask 195.189.120.0 195.189.123.255 CIDR = /22
Развернуть код ...
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
@Echo Off
:: # 
:: # Subnet mask from IP range v2.1
:: # Inquisitor, 2012-2013
:: # Distributed under GNU GPL v2 license
:: # [url]http://www.gnu.org/licenses/gpl-2.0.html[/url]
:: # 
:: # USAGE: NetMask.cmd first_ip_from_range last_ip_from_range
:: #        or, for display in CIDR format
:: #        NetMask.cmd first_ip_from_range last_ip_from_range cidr
:: # 
SetLocal EnableDelayedExpansion
Set NetworkHostBoundary=false
Set NetMask=
 
:: Если вызывается не из консоли, а из другого батника,
:: вызывать нужно из цикла for для корректной работы
:: Пример:
rem For /F %%A In ('netmask.cmd 192.168.1.0 192.168.8.255') Do Echo %%A
 
:: Проверка на запуск с аргументами
:: Если без аргументов - пример использования и выход
If "%*"=="" (
    For /F "tokens=1,* delims=#" %%A In ('FindStr /R /B "::.#" "%~dpnx0"') Do (
        Echo.%%B
    )
    GoTo :EOF
)
 
:: Разбор входящих аргументов, cравнение начального и конечного
:: адресов по октетам
For /F "tokens=1-9 delims=. " %%A In ("%*") Do (
    Call :Mask %%A %%E
    Call :Mask %%B %%F
    Call :Mask %%C %%G
    Call :Mask %%D %%H
    If /I "%%I"=="CIDR" Call :CIDR
)
:: Вывод в stdout результата и выход, раскомментировать нужное
:: Вывод _БЕЗ_ перевода строки
<Nul Set /P Echo=!NetMask!
:: Вывод _С_ переводом строки
rem Echo !NetMask!
GoTo :EOF
 
 
:DEC2BIN
:: Функция перевода числа из десятеричной системы в двоичную
:: Принимает один аргумент, результат возвращается в %Result%
Set Result=
Set Data=%~1
:d2b_loop
:: Проверяем, есть ли остаток от деления
Set /A x1=Data/2
Set /A x2=x1*2
If "%x2%"=="%Data%" (Set Mod=0) Else (Set Mod=1)
:: Устанавливаем в качестве входных данных результат деления
Set Data=%x1%
:: Пишем результат поразрядно, в обратном порядке
Set Result=%Mod%%Result%
:: Следующая итерация или выход после окончания
If Not "%x1%"=="0" GoTo d2b_loop
:: Перед выходом - дополнение ведущими нулями до двух в восьмой
:: Требуется для корректного сравнения двух чисел без сдвига
Call :LeadingZero %Result%
GoTo :EOF
 
:BIN2DEC
:: Функция перевода числа из двоичной системы в десятеричную
:: Принимает один аргумент, результат возвращается в %Result%
Set Result=
:: Значение -1 для начала значения счетчика с нуля
Set i=-1
Set Data=%1
:b2d_loop
:: Получаем текущий разряд числа
Set /A i+=1
Set x1=%Data:~-1%
:: Используем бинарный сдвиг для получения степени двойки
Set /A x2="x1 * (1 << i)"
:: Добавляем к результату
Set /A Result+=%x2%
:: Следующая итерация или выход после окончания
If Not "%Data:~,-1%"=="" (Set Data=%Data:~,-1%&GoTo b2d_loop)
GoTo :EOF
 
:LeadingZero
:: Дополнение ведушими нулями до двух в восьмой (один байт)
:: Принимает один аргумент, результат возвращается в %Result%
Set Result=
Set Data=%~1
For /L %%A In (1,1,8) Do (
    If Not "!Data!"=="" (
        Set Result=!Data:~-1!!Result!
        Set Data=!Data:~,-1!
    ) Else (
        Set Result=0!Result!
    )
) 
GoTo :EOF
 
:FastCompare
:: Быстрое сравнение, если найдены различия - вызывается функция
:: более детального сравнения для поиска самого различия
:: Принимает два аргумента, результат возвращается в %Result%
If Not !NetworkHostBoundary!==true (
    If "%1"=="%2" (
        Set Result=11111111
        GoTo :EOF
    ) Else (
        Call :Compare %1 %2
    )
) Else (
    Set Result=00000000
)
GoTo :EOF
 
:Compare
:: Сравнение двух однобайтных чисел поразрядно, локализация начала различий
:: и забивание всего после первого различия нулями
:: Принимает два аргумента, результат возвращается в %Result%
:: Ведущие нули у обоих чисел обязательны
Set x1=%1&Set x2=%2
Set Result=
For /L %%A In (1,1,8) Do (
:: Получение ведущего разряда от каждого из чисел
    Set n1=!x1:~,1!
    Set n2=!x2:~,1!
:: Сравнение двух чисел и инвертирование бита
    Set /A Data="1 ^ (n1 ^ n2)"
:: Установка флага начала различия
    If !Data!==0 Set NetworkHostBoundary=true
:: Обнуление всех последующих после различия разрядов
    If !NetworkHostBoundary!==true Set Data=0
:: Поразрядная запись результата
    Set Result=!Result!!Data!
:: Устанавливаем остаток в качестве входных данных для следующей итерации
    Set x1=!x1:~1!
    Set x2=!x2:~1!
)
GoTo :EOF
 
:Mask
:: Генерация одного октета маски
:: Принимает два аргумента, результат дописывается к %NetMask%
Call :DEC2BIN %1&&Set From=!Result!
Call :DEC2BIN %2&&Set To=!Result!
Call :FastCompare !From! !To!
Call :BIN2DEC !Result!
If "!NetMask!"=="" (Set NetMask=!Result!) Else (Set NetMask=!NetMask!.!Result!)
GoTo :EOF
 
:CIDR
:: Трансформация маски в формат CIDR
Set BinMask=
Set i=0
:: Разбираем маску обратно на октеты
Set NetMask=!NetMask:.= !
For %%A In (!NetMask!) Do (
    Call :DEC2BIN %%A
    :: И собираем бинарную маску
    Set BinMask=!BinMask!!Result!
)
:: Удаляем из неё незначащие нули, а единицы разделяем пробелами
Set BinMask=!BinMask:0=!
Set BinMask=!BinMask:1=1 !
:: Считаем единицы
For %%A In (!BinMask!) Do (Set /A i+=1)
:: Устанавливаем значение
Set NetMask=/!i!
Exit /B

.
2
Anonymоus
611 / 91 / 14
Регистрация: 15.08.2012
Сообщений: 62
15.10.2012, 05:16 #6
Пакетное получение информации о IP-адресах и построение HTML-отчёта.

Использование - поместить IP-адреса (по одному на строку) в файл iplist.txt, запустить masswhois.bat и дождаться завершения работы. Результат будет представлен в виде result.html
Если IP-адреса нужно выделить из общей массы текста, поместить текст в файл raw_data.txt и запустить get_all_ip.bat, список IP без дублей будет автоматически сгенерирован и передан на обработку masswhois.bat

В отчёте представлены: сам IP, его маска и диапазон, страна, имя подсети и адрес.

Использованные внешние утилиты - grep, uniqline, whosip, netmask.cmd
2
Вложения
Тип файла: zip masswhois.zip (868.6 Кб, 829 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16600 / 6985 / 845
Регистрация: 25.12.2011
Сообщений: 10,781
Записей в блоге: 16
21.10.2012, 03:05  [ТС] #7
Вывод текста без переноса на новую строку

Принцип подсмотрел у alexii на сером форуме.

Код содержит невидимые символы BackSpace (0x08).
Поэтому, чтобы их увидеть, Ваш редактор должен их поддерживать.

Будет полезен для создания процентного прогрессбара
или указания на текущий обрабатываемый файл, если есть необходимость в экономии места на экране.
Это Lite-версия: не учитывает возможность превышения длиной выводимого текста ширины консольного окна.

Рабочий вариант качайте с файла.
Под спойлером код с комментариями. Он работать не будет, т.к. я заменил все BackSpace (0x08) на символ (0х20) для наглядности.
Чтобы поставить такой символ, достаточно нажать Alt + 8 (на цифровой клавиатуре).
Код - замените (0х20) на (0x08)

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
@Echo Off
Setlocal EnableExtensions EnableDelayedExpansion
pause>nul
:Start
Call :StrOne "Эти слова" new
pause>nul
Call :StrOne " написаны рядом" new
pause>nul
Call :StrOne "Это новая строка" crlf
pause>nul
Call :StrOne "Замена!!!"
pause>nul
Call :StrOne " Пишем рядом" new
pause>nul
Call :StrOne " И снова заменяем :)"
pause>nul
for /r c:\windows %%A in (*) do Call :StrOne "%%~nxA"
goto :eof
 
:StrLen
::Вычисляет длину переменной.
::Результат записівается в переменную LastLen
set strString=%~1
set /a LastLen = 0
::Максимальная длина переменной = 1024 символа
for /l %%i in (0,1,1024) do (
  set strTempString=!strString:~%%i,1!
  if "!strTempString!" neq "" (
    set /a LastLen+=1
  )
)
exit /b 0
 
:StrOne
::%1 - строка, которую отображаем
::%2 - параметры:
::new - печатать рядом
::vblf - печатать с новой строки
::если опущен, то заменять предыдущий текст.
if "%2"=="new" (call :StrWrite "%~1"& exit /b 0)
if "%2"=="crlf" (echo.&call :StrWrite "%~1"& exit /b 0)
::если предыдущего текста не было, просто печатаем текст и записываем его длину
if not defined LastLen (call :StrWrite "%~1"& exit /b 0)
::Переменная с БекСпейсами
Set BS=
::Набиваем нужным количеством БекСпейсов
for /l %%i in (1,1,%LastLen%) do (Set BS=!BS!)
::Возвращаем каретку назад
<nul set /p text=%BS%
::Печатаем текст поверх старого
<nul set /p text=_¶%~1
Set /a LenBefore=%LastLen%
Call :StrLen "%~1"
::Если новый текст короче старого, нужно затереть оставшиеся символы
if %LenBefore% GTR %LastLen% (
  set Space=
  set /a n=%LenBefore%-%LastLen%
  rem Набиваем Space слева пробелами, а справа возратом каретки
  rem Нужно ее ведь затем вернуть в пред. позицию
  for /l %%i in (1,1,!n!) do (Set Space= !Space!)
  rem Знак подчеркивания + BackSpace здесь я использую для обхода ограничения
  rem т.к. иначе, если в начале строки мы захотим напечатать пробел - это не получится сделать
  rem Команда (<nul set /p text= Текст) выведет "Текст" без пробела!
  (<nul set /p text=_¶!Space!)
)
exit /b 0
 
:StrWrite
::Печатаем текст на той же строке
<nul set /p text=_¶%~1
::Обнуляем переменную длины предыдущей строки
set /a LenBefore=0
::Вычисляем длину напечатанной строки
Call :StrLen "%~1"
exit /b 0
1
Вложения
Тип файла: rar BS.rar (577 байт, 277 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16600 / 6985 / 845
Регистрация: 25.12.2011
Сообщений: 10,781
Записей в блоге: 16
27.10.2012, 02:37  [ТС] #8
Циклическое копирование файлов по каталогам с ожиданием завершения их дозаписи в исходную папку.

Массовая рассылка файлов
0
Dragokas
Эксперт WindowsАвтор FAQ
16600 / 6985 / 845
Регистрация: 25.12.2011
Сообщений: 10,781
Записей в блоге: 16
02.11.2012, 18:00  [ТС] #9
Перекодировка текста

Смотрите обновленную тему: Перекодировка текста (сборник кодов для различных кодовых страниц)

Из любой кодировки в любую (через утилиту win_iconv)


Скачать утилиту.

Синтаксис:
Bash
iconv [-c] [-s] [-f encoding] [-t encoding] [inputfile …]
Перечень кодировок:
Bash
iconv -l
Пример использования:
Bash
win_iconv -f UTF-16LE -t cp866 "UTFtext.txt" > "DOStext.txt"
Подробности в теме о ключах.


Win <-> OEM (неконсольный - на языке VBA)

Автор: Dragokas

Написан на VBA (Excel). Скачать.

Для работы необходимо включить макросы:
Для Office = 2003: Сервис -> Макрос -> Безопасность -> Выставить "Средний" или "Низкий".
Для Office > 2003 MSDN

Описание функций:
  • Перекодировка:
    - в Unicode.
    - Из OEM-866 -> в Win-1251
    - Из Win-1251 -> в OEM-866.
  • Таблица символов с их 10-ричным и 16-ым представлениями:
    - 1-байтовая;
    - 2-байтовая.



OEM-866 -> WIN-1251 (на CMD)


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
SetLocal
::Файл с кодировкой OEM-866
set FileIn=text.txt
::Результат, куда записывать WIN-1251
set FileOut=text.txt
 
chcp 866> nul
for /f "delims=" %%a in (%FileIn%) do (
  if not defined cpReady (
    chcp 1251> nul
    set CpReady=True
  )
  call :convert "%%a"  2>NUL
)
chcp 866> nul
goto :eof
 
:convert
echo.%~1>>"%FileOut%"


OEM-866 -> WIN-1251 (через утилиту на ASM)

Скачать to1251.zip. Самый быстрый перекодировщик. Написан на ассемблере =)

Автор: Charles Kludge

Использование только через конвейер:
Bash
ipconfig /all | to1251.exe > result.txt
Bash
to1251.exe < file1.txt > result.txt
Исходник. Код ASM:

Assembler
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
format PE console 4.0
 
include 'win32a.inc'
 
next:   invoke  crt_getchar
    push    eax
    invoke  GetLastError
    or  eax, eax
    jnz exit
    pop eax
    call    recode
    invoke  crt_putchar, eax
    jmp next
exit:   
        invoke  ExitProcess,0
recode: 
    cmp eax,080h        ; rus cap 'A'
    jb  @5
    cmp eax,0afh         ; rus small 'п'
    ja  @1
    or  al,40h
@5: ret
@1:
    cmp al,0e0h     ; rus small 'р'
    jae @4
    mov al,20h      ; pseudoghaphic chrs 0xb0-0xdf -> <space>
    ret
@4: cmp al, 0efh    ; rus small 'я'
    ja  @3
    add al,10h
    ret
@3:     and ax, 0fh
    mov ebx, xlt
    xlatb   
@2:
    ret
xlt db  0a8h, 0b8h, 0aah, 0bah, 0afh, 0bfh, 0a1h, 0a2h, 0b0h, 95h, 0b7h,20h,0b0h,0a4h,20h,20h
 
; import data in the same section
 data import
 
 library kernel32,'KERNEL32.DLL',\
     msvcrt,'MSVCRT.DLL'
 
 import kernel32,\
        ExitProcess,'ExitProcess',\
        GetLastError,'GetLastError'
 
 import msvcrt,\
    crt_getchar,'getchar',\
    crt_putchar, 'putchar'
end data


Win-1251 -> в Unicode (UTF-16LE) (на CMD)


С возможностью указать исходную кодовую страницу:

Использование:

Bash
Batch.cmd infile outfile src_codepage
где:

Batch.cmd - сам Batch-файл
infile - файл для перекодировки
outfile - выходной файл
src_codepage - необязательный параметр. Номер кодовой страницы исходного файла.

2 варианта кода:

1) Исходник кода сохранить в кодировке WIN-1251:
Bash
1
2
3
4
5
6
7
8
9
10
11
@echo off
:: преобразование текстового файла в unicode (utf-16 LE)
:: вызов: to_uni infile outfile codepage
:: BAT-файл должен быть сохранен в кодировке WIN-1251
SetLocal
For /f "tokens=2 delims=:" %%G in ('CHCP') do Set _codepage=%%G
chcp 1251 >nul
CMD.EXE /D /A /C (set /p=яю)<NUL > "%~2"
CHCP %~3 >NUL
CMD.EXE /D /U /C TYPE "%~1" >> "%~2"
CHCP %_codepage% >NUL
2) исходник кода сохранить в кодировке OEM-866:
Bash
1
2
3
4
5
6
7
8
9
10
11
@echo off
:: преобразование текстового файла в unicode (utf-16 LE)
:: вызов: to_uni infile outfile codepage
:: BAT-файл должен быть сохранен в кодировке OEM-866
SetLocal EnableExtensions
For /f "tokens=2 delims=:" %%G in ('CHCP') do Set _codepage=%%G
chcp 866 >nul
for /F %%? in ('echo яю') do chcp 1251 >nul& CMD.EXE /D /A /C (set /p=яю)<NUL > "%~2"
CHCP %~3 >NUL
CMD.EXE /D /U /C TYPE "%~1" >> "%~2"
CHCP %_codepage% >NUL


Как настроить кодировку исходного кода Batch-файла, какой выбрать редактор: Русский текст в консоли

UTF-8 -> Win-1251 (cmd)

От Smitis

Bash
1
2
3
4
5
6
:: UTF-8 -> ANSI
@echo off
chcp 65001 > nul
cmd /u /c type utf8.txt > tmp.txt
chcp 1251 > nul
type tmp.txt > ansi.txt


UTF-16 -> OEM-866 (cmd)

Bash
1
cmd /a /c type utf16.txt > 866.txt


UTF-16 -> Win-1251 (cmd)

Bash
1
2
chcp 1251
cmd /a /c type utf16.txt > 866.txt
4
Вложения
Тип файла: rar FromUnicode (конвертор)2.rar (59.5 Кб, 372 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16600 / 6985 / 845
Регистрация: 25.12.2011
Сообщений: 10,781
Записей в блоге: 16
12.11.2012, 07:27  [ТС] #10
Завершение процесса (оформлено в виде меню).

Развернуть код
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
SetLocal EnableDelayedExpansion
:begin
cls
For /F "tokens=1 delims=," %%p In ('tasklist /FO CSV /nh^|sort') Do (
  Set nam=%%p
  Set /A nn+=1
  set proc!nn!=%%p
  echo !nn!. %%~p
)
:start
set /p kill=Введите номер процесса, который нужно завершить:
if "%kill%"=="" goto :start
echo Выбран !proc%kill%!. Уверены? (нажмите ENTER)
echo.
pause
taskkill /f /im !proc%kill%! /T
goto begin
1
Миниатюры
Полезные BAT/CMD скрипты  
Dragokas
Эксперт WindowsАвтор FAQ
16600 / 6985 / 845
Регистрация: 25.12.2011
Сообщений: 10,781
Записей в блоге: 16
12.11.2012, 07:57  [ТС] #11
Крутящаяся палка (имитация).
Автор: sov44

По типу - песочные часы в Windows =))
2
Вложения
Тип файла: zip Крутящаяся палка.zip (409 байт, 1753 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16600 / 6985 / 845
Регистрация: 25.12.2011
Сообщений: 10,781
Записей в блоге: 16
12.11.2012, 09:10  [ТС] #12
Создание CAB-архивов
(в т.ч. самораспаковующихся EXE).
а также распаковка CAB.

Автор: Alex Averchenkoff

Развернуть код
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
@echo **************************************************
@echo ((((((((((((((((((((((((((((((((((((((((((((((((((
@echo Name:         CabMaker.exe
@echo Description:  A program for creating cab archives 
@echo Version:      v. 1.0.0.0
@echo Copyright:    @Alex Averchenkoff
@echo Create:       2011
@echo ))))))))))))))))))))))))))))))))))))))))))))))))))
@echo **************************************************
 
@echo off
 
set SaveName=""
 
rem ******************************************************
rem СТАРТОВЫЙ БЛОК - ВЫБИРАЕМ ДЕЙСТВИЕ:ПРОСМОТР\РАСПАКОВКА\СОЗДАНИЕ АРХИВА
rem ******************************************************
:start
echo.
set /p action=VIEW-1^|EXPAND-2^|CREATE-3:
if /i "%action%"=="1" (goto view) 
if /i "%action%"=="2" (goto extract) 
if /i "%action%"=="3" (goto create) 
exit 
 
rem ******************************************************
rem ПРОСМОТР CAB АРХИВА
rem ******************************************************
:view
set /p name=ENTER NAME ARCHIVE:
if "%SaveName%"=="" ( set SaveName=%name%)
if "%name%"=="" ( set name=%SaveName%)
if not "%name%"=="" (expand -D %name%.cab) else ( goto view)
 
if errorlevel 0 (goto action) 
if errorlevel 1 (@echo An error occurred, try again)
 
rem ******************************************************
rem РАСПАКОВКА CAB АРХИВА - ФАЙЛЫ РАСПАКОВЫВАЮТСЯ В ДИРЕКТОРИЮ ОДНОИМЕННУЮ С ИМЕНЕМ АРХИВА
rem ******************************************************
:extract
set /p name=ENTER NAME ARCHIVE:
if "%SaveName%"=="" ( set SaveName=%name%)
if "%name%"=="" ( set name=%SaveName%)
if not "%name%"=="" (md "%~dp0%name%" && expand %name%.cab /F:*  .\%name%) else ( goto extract)
 
 
if errorlevel 0 (@echo Archive successfully unzipped! & goto action) 
if errorlevel 1 (@echo An error occurred, try again)
 
:action
echo You want to continue or exit the program?
set /p action=TO CONTINUE OR EXIT? [Y\N]:
if /i "%action%"=="Y" (goto start) else exit
 
rem ******************************************************
rem СОЗДАНИЕ НОВОГО CAB АРХИВА  - СОЗДАЕТСЯ В ПАПКЕ РАСПОЛОЖЕНИЯ БАТНИКА
rem ******************************************************
:create
set /p name=ENTER NAME FOR ARCHIVE:
if "%SaveName%"=="" ( set SaveName=%name%)
if "%name%"=="" ( set name=%SaveName%)
if "%name%"=="" ( goto create)
 
rem ******************************************************
rem БУДЕМ ЛИ СОЗДАВАТЬ РАСПАКОВЫВАЮЩИЙСЯ АРХИВ
rem ******************************************************
set /p sfx=CREATE SFX?[Y\N]:
 
if /i "%sfx%"=="Y" (@echo  Initiated the creation of self-extracting archive)
echo.
rem ******************************************************
rem СОЗДАЕМ СПИСОК ФАЙЛОВ И ФАЙЛ ОТВЕТОВ ДЛЯ MAKECAB
rem ******************************************************
@echo  .Set CabinetNameTemplate=%name%.cab>make.ddf
@echo  .Set CompressionType=MSZIP>>make.ddf
@echo  .Set MaxDiskSize=CDROM>>make.ddf
@echo  .Set ReservePerCabinetSize=6144>>make.ddf
@echo  .Set Compress=on>>make.ddf
@echo  .Set CompressionMemory=21>>make.ddf
@echo  .Set DiskDirectoryTemplate=".">>make.ddf
@echo  .Set Cabinet=ON>>make.ddf
@echo  .Set MaxCabinetSize=999999999>>make.ddf 
@echo  .Set CompressionLevel=^7>>make.ddf
 
rem ******************************************************
rem СОЗДАЕМ ОБЫЧНЫЙ АРХИВ
rem ******************************************************
chcp 1251>nul
FOR /R %%f IN (*.*) DO  (
    If not "%%~nxf"=="make.ddf" (
       @If not "%%~nxf"=="CabMaker.bat" (@echo "%%f">>make.ddf))
    )
makecab /F make.ddf
if /i "%sfx%"=="Y" (goto create_sfx) else ( goto clear)
 
:clear
del setup.inf
del setup.rpt
del make.ddf
chcp 866 > nul
echo.
echo Creating a backup is successfully completed!
goto action
 
 
rem ******************************************************
rem МАГИЕЙ ПРЕВРАЩАЕМ ОБЫЧНЫЙ АРХИВ В САМРАСПАКОВЫВАЮЩИЙСЯ  :-)
rem ******************************************************
:create_sfx
copy /b %windir%\system32\extrac32.exe+%name%.cab %name%.exe
del setup.inf
del setup.rpt
del make.ddf
del %name%.cab
chcp 866 > nul
echo.
echo Create self-extracting archive completed successfully!
goto action
2
Вложения
Тип файла: zip CabMaker.zip (1.4 Кб, 496 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16600 / 6985 / 845
Регистрация: 25.12.2011
Сообщений: 10,781
Записей в блоге: 16
18.11.2012, 06:05  [ТС] #13
Смена владельца и прав на папку и ее содержимое, в которой запущен батник (Full Access <-> Read Only)
Автор: Dragokas

Обновлено 20.11.2012. Добавлена совместимость с XP и Server 2003.

1) RO.cmd (ReadOnly) - делает все файлы и папки доступными только для чтения и выполнения.
Дополнительно разрешается в текущей папке - создавать файлы.
Все остальные операции, в т.ч. и создание файлов в подкаталогах - запрещено.

2) FA.cmd (FullAccess) - восстанавливает полный доступ для всех пользователей.

Для нормальной работы в ОС Windows Vista, Win 7 батник нужно запускать правой кнопкой мыши "От имени Администратора".
FA.cmd будет работать после блокировки RO.cmd-хой только при запуске от Админа.

Как пользоваться:
Файл множество раз протестирован и безопасен, если будете придерживаться правила:
Запускать батник только из той папки, в которой нужно ограничить доступ (RO.cmd) или получить полные права (FA.cmd).
Работает рекурсивно для всех подкаталогов, начиная с каталога, где находится батник.


Для корректной работы, вероятно, понадобится утилита из Microsoft Support Tools - ICACLS (включена в ОС Windows Server 2003, начиная с SP2).

Поддержка:
Скрипт протестирован в средах английской и русской локализаций, а также:
1) Windows XP SP2
2) Windows Server 2003 SP2
3) Windows 7 SP1

Исходный код


Сохранять в кодировке OEM-866.

FA.cmd
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
if "%1"=="" (
  Echo Working...
  Call "%~dpnx0" 0 1>nul 2>&1
  Echo Ready...
  Goto :eof
)
 
Setlocal Enableextensions
 
Set Cur=%~dp0
Set Cur=%Cur:~0,-1%
 
takeown /f "%Cur%" /r /d y
 
icacls "%Cur%" /grant All:f /T /C
icacls "%Cur%" /grant Все:f /T /C
RO.cmd
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
@echo off
if "%1"=="" (
  Echo Working...
  Call "%~dpnx0" 0 1>nul 2>&1
  Echo Ready...
  Goto :eof
)
 
Setlocal Enableextensions
 
Set Cur=%~dp0
Set Cur=%Cur:~0,-1%
 
takeown /f "%Cur%" /r /d y
 
icacls "%Cur%" /deny All:(DE,WDAC,WO,AS,WD,AD,WEA,DC,WA) /T /C
icacls "%Cur%" /deny Все:(DE,WDAC,WO,WD,AS,AD,WEA,DC,WA) /T /C
 
icacls "%Cur%" /grant All:(RC,S,GR,GW,GE,RD,REA,X,RA) /T /C
icacls "%Cur%" /grant Все:(RC,S,GR,GW,GE,RD,REA,X,RA) /T /C
 
icacls "%Cur%" /grant All:(WD) /C
icacls "%Cur%" /grant Все:(WD) /C
 
icacls "%~dpnx0" /grant:r Все:f /C
icacls "%~dpnx0" /grant:r All:f /C
В коде использован метод двойного запуска скрипта исключительно для упрощения
перенаправления потока вывода в NUL.
Метод "обворачивания" скобками приводил к синтаксическим ошибкам в силу
некоторых особенностей работы утилиты ICACLS.



Обсуждение скрипта в теме: Смена владельца и прав на папку и ее содержимое
5
Вложения
Тип файла: zip Access.zip (671 байт, 802 просмотров)
Тип файла: zip icacls.exe - Vista - Windows 7.zip (14.3 Кб, 571 просмотров)
Тип файла: zip icacls.exe - XP - Server 2003.zip (13.9 Кб, 361 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
16600 / 6985 / 845
Регистрация: 25.12.2011
Сообщений: 10,781
Записей в блоге: 16
26.11.2012, 13:41  [ТС] #14
Пищалка (подобие beep)
на простой команде Эхо.

Блокнотом Windows не редактировать!
(использован служебный символ &H07 и кодовая страница OEM-866)

Из командной строки звук можно симмитировать нажатием Ctrl+G, {ENTER}.
5
Вложения
Тип файла: zip beep.zip (121 байт, 1172 просмотров)
khaarax
4 / 0 / 0
Регистрация: 09.12.2012
Сообщений: 5
09.12.2012, 23:00 #15
Вызов GUI диалогового окна выбора папки
Это HTA-обертка на JavaScript-е для открытия диалогового окна выбора папки через объект WshShell.

Развернуть код

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
setlocal
 
for /f "tokens=2 delims=:" %%i in ('chcp') do (
    set sPrevCP=%%i
    chcp 1251 >nul
)
 
for /f "usebackq delims=" %%i in (
    `@"%systemroot%\system32\mshta.exe" "javascript:var objShellApp = new ActiveXObject('Shell.Application');var Folder = objShellApp.BrowseForFolder(0, 'SELECT FOLDER',1, '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}');try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(Folder.Self.Path)};catch (e){};close();" ^
    1^|more`
) do set sFolderName=%%i
 
chcp %sPrevCP% >nul
 
if defined sFolderName (
    echo Выбрана папка: %sFolderName%
) else (
    echo Папка не была выбрана.
)
pause

Копирайты не помню чьи.
0
Миниатюры
Полезные BAT/CMD скрипты  
09.12.2012, 23:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2012, 23:00
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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