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

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

15.10.2012, 00:56. Показов 615322. Ответов 182

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

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

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

Другое
Расчёт индекса массы тела и идеального веса ссылка
22
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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...

182
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 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
Вложения
Тип файла: zip Dual_Synhro.zip (586 байт, 646 просмотров)
3
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 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
Вложения
Тип файла: rar Anti_Hidden_fast_ua_v.1.5.1.rar (3.1 Кб, 1233 просмотров)
Тип файла: rar Anti_Hidden_fast_ru_v.1.5.1.rar (3.0 Кб, 2247 просмотров)
8
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 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

Смежный скрипт: Смена владельца и прав на папку и ее содержимое, в которой запущен батник
Вложения
Тип файла: zip Full_access.zip (403 байт, 1781 просмотров)
14
612 / 92 / 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
612 / 92 / 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
Вложения
Тип файла: zip masswhois.zip (868.6 Кб, 1117 просмотров)
2
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 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
Вложения
Тип файла: rar BS.rar (577 байт, 407 просмотров)
1
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
27.10.2012, 02:37  [ТС] 8
Циклическое копирование файлов по каталогам с ожиданием завершения их дозаписи в исходную папку.

Массовая рассылка файлов
0
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 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
Вложения
Тип файла: rar FromUnicode (конвертор)2.rar (59.5 Кб, 652 просмотров)
4
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 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
Миниатюры
Полезные BAT/CMD скрипты  
4
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
12.11.2012, 07:57  [ТС] 11
Крутящаяся палка (имитация).
Автор: sov44

По типу - песочные часы в Windows =))
Вложения
Тип файла: zip Крутящаяся палка.zip (409 байт, 2813 просмотров)
4
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 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
Вложения
Тип файла: zip CabMaker.zip (1.4 Кб, 780 просмотров)
3
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 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.



Обсуждение скрипта в теме: Смена владельца и прав на папку и ее содержимое
Вложения
Тип файла: zip Access.zip (671 байт, 1089 просмотров)
Тип файла: zip icacls.exe - Vista - Windows 7.zip (14.3 Кб, 767 просмотров)
Тип файла: zip icacls.exe - XP - Server 2003.zip (13.9 Кб, 457 просмотров)
7
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
26.11.2012, 13:41  [ТС] 14
Пищалка (подобие beep)
на простой команде Эхо.

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

Из командной строки звук можно симмитировать нажатием Ctrl+G, {ENTER}.
Вложения
Тип файла: zip beep.zip (121 байт, 1964 просмотров)
5
7 / 3 / 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

Копирайты не помню чьи.
Миниатюры
Полезные BAT/CMD скрипты  
3
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
30.12.2012, 04:46  [ТС] 16
Многопроцессное создание пустых файлов (бенчмарк для винчестера)
Код от: Dragokas
Спасибо Petya V4sechkin (OSZone) за ценную подсказку о синтаксисе запуска процесса.

P.S. Ниже "процессы" названы "потоками" (простите за эту глупую опечатку).

Настраиваемые параметры:
Set Dest=y:\m2 - каталог, в котором создавать файлы
Set /A Potok=50 - общее кол-во запускаемых потоков
Set /A PotokMax=8 - максимальное кол-во одновременно запускаемых потоков
Set /A Range=10000 - кол-во пустых файлов, создаваемых каждым потоком.

Развернуть код
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
::Многопотоковое создание пустых файлов ::by Alex Drago.kas
@echo off
Setlocal EnableDelayedExpansion EnableExtensions
Set Dest=y:\m2
Set /A Potok=50
Set /A PotokMax=8
Set /A Range=10000
 
if not exist "%Dest%" md "%Dest%"
::1 из потоков - управляющий (этот код) + 1(?не знаю почему)
Set /A PotokMax+=2
 
Set TimeS=%Time%
Call :TimeToMSec "%TimeS%" TimeS_ms
Echo Задание начато в %TimeS%
 
Set /A sS=0
For /L %%P in (1,1,%Potok%) do (
  Set /A sE=!sS!+%Range%-1
  start "Stream %%P" /min "CMD /Q /C For /L %%N in (!sS!,1,!sE!) do cd.>%Dest%\%%N"
  Set /A sS+=%Range%
  Echo Запущен поток № %%P
  Call :WaitForReady %PotokMax%
)
Echo Все потоки запущены.
Echo Ожидаю завершения заданий.
 
Call :WaitForReady 3&:: (+1 ?не знаю почему)
 
Set TimeE=%Time%
Call :TimeToMSec "%TimeE%" TimeE_ms
 
Echo Задание  начато  в  %TimeS%
Echo Задание завершено в %TimeE%
 
Set /A diff=TimeE_ms-TimeS_ms
Set /A diffSS=diff/100
Set /A diffms=%diff% %% 100
Set /A TotalFiles=Potok*Range
Set /A Speed=TotalFiles*100/diff
Echo Записано %TotalFiles% файлов.
Echo Затрачено: %diffSS%,%diffms% с.
Echo Скорость:  %Speed% файлов/с.
Echo.
pause
Goto :eof
 
:WaitForReady %PotokMax%
Set /A n=0
For /F "Delims=" %%A in ('tasklist^|Findstr /BLIC:cmd.exe') do (Set /A n+=1)
if %n% LSS %~1 Exit /B
ping -w 100 -n 1 192.168.254.254> nul
Goto :WaitForReady
 
:TimeToMSec %Time% %var_mSec%
For /F "Tokens=1-4 Delims=,:" %%A in ("%~1") do (
  Set /A HH=%%A
  Set MM=1%%B& Set /A MM=!MM!-100
  Set SS=1%%C& Set /A SS=!SS!-100
  Set mS=1%%D& Set /A mS=!mS!-100
)
Set /A %~2=(HH*60*60+MM*60+SS)*100+mS
Exit /B


В поданном коде создается 50*10000 = 0,5 млн. файлов, так что попытавшись открыть такую папку даже файловым менеджером все напрочь зависнет.
Чтобы удалить созданные файлы, прилагаю еще один бат-файл, который визуально отображает %-ый индикатор завершения удаления файлов.

Результаты тестов на моем SSD :)

Полезные BAT/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
::Индикация процесса удаления папки
@echo off
Set Fold=y:\m2
 
Echo Удаляю каталог %Fold%
Start /min cmd /c "rmdir /s /q "%Fold%"& exit"
 
Call :Count
Set /A Full=%n%
Echo 0%% - %Full% files
 
:Continue
Call :Count
Set /A Percent=100-(%n%*100/%Full%)
Echo %Percent%%%
ping -w 1000 -n 1 192.168.254.254> nul
if %n% neq 0 Goto :Continue
Echo.
Echo Ends.
pause
 
:Count
Set /A n=0
if not exist "%Fold%" Exit /B
dir /b "%Fold%">"%temp%\files.tmp"
for /F "Delims=" %%A in ('find /v /c ""^<"%temp%\files.tmp"') do (Set /A n=%%A)
::for /F "UseBackQ Delims=" %%A in ("%temp%\files.tmp") do @Set /A n+=1
Exit /B
Вложения
Тип файла: zip Speed.zip (1.5 Кб, 443 просмотров)
5
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
03.01.2013, 02:43  [ТС] 17
Помощник компиляции исходных кодов и проектов .NET (.cs / .sln (C#, VB.NET)) через консольный NET.FrameWork компилятор (csc или msbuild)
Автор: Dragokas

UPD. 02.03.2017 - добавил скрипт для msbuild.

Зачем нужен:
Например, в системе не установлена MS Visual Studio или другая среда разработки.

Требования:
Установленный NET.FrameWork, в некоторых случаях Windows SDK.

Использование:
1. Перетянуть на данный скрипт файл с исходным кодом C# (.cs / .sln) - "Drag & Drop"
2. Либо задать как аргумент в консоли, например, compile.cmd source.cs

Функционал:
Компиляция исходного кода C# с помощью консольного CSC.exe (msbuild) компилятора.
Все версии FrameWork-а скрипт находит в папке windows\microsoft.net, после чего дает Вам выбор какой версией компилировать и запоминает ее.
Ведет файл-протокола ошибок в DOS (CP-866) и WIN (CP-1251) кодировках и предлагает его сохранить.
Ошибки выводит также на экран. В случае их отсутствия, скрипт завершает работу без ожидания.

Внутри скрипта есть некоторые комментарии по детальным настройкам.

Кликните здесь для просмотра всего текста
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& :: by Alex Dragokas -02.01.2013-
::Помощник компиляции исходников C#
Setlocal EnableDelayedExpansion EnableExtensions
 
::Задайте путь к файлу настроек скрипта
set FWCompilerPath=%temp%\FWCompile.cfg
::Задайте здесь полный путь к компилятору, либо он будет найден и сохранен автоматически в файл FWCompile.cfg
::set FWExec=c:\Windows\Microsoft.NET\Framework\v3.5\csc.exe
::Путь к временным файлам протокола ошибок
set log866=%temp%\compile_err866.log
set log1251=%temp%\compile_err.log
 
Echo Помощник компиляции исходных файлов C# (.cs)
Echo.
if "%1"=="" (
  Echo Перетяните исходный файл .cs на этот скрипт ^(Drag ^& Drop^),
  Echo или задайте его как аргумент, например "%~nx0" "c:\temp\source.cs"
  Echo.& pause& Goto :eof
)
 
::Если путь указан в шапке
if Defined FWExec goto :begin
::Читаю путь к компилятору из файла настроек
if exist "%FWCompilerPath%" for /f "UseBackQ delims=" %%A in ("%FWCompilerPath%") do set FWExec=%%A& goto :begin
 
Echo Выберите версию FrameWork, с помощью которой по-умолчанию будет компилироваться исходник
Echo.
for /f "delims=" %%A in ('dir /b /s /a:-d "%windir%\Microsoft.NET\csc.exe"') do (
  Set /A n+=1
  Set FW!n!=%%A
  for /f "tokens=4,5 delims=" %%r in ("%%A") do (
    echo %%r|find "64">nul
    if !errorlevel!==0 (set arch=x64) else (set arch=x32)
    echo !n!. !arch! %%s
  )
)
if not Defined n (Echo На компьютере не обнаружен установленный FrameWork& Echo.& pause& goto :eof)
Echo.
:FWenter
Set /p FWver="Ожидаю ввода: "
if "%FWver%"=="" Goto :FWenter
if %FWver% LSS 0 Goto :FWenter
if %FWver% GTR %n% Goto :FWenter
set FWExec=!FW%FWver%!
Echo %FWExec%> "%FWCompilerPath%"
 
::Дополнительные параметры
::/unsafe - компиляция блоков с прямым доступом к памяти
::/reference:"%Ref%\addon.dll" - подключить дополнительный модуль
::/target:library - скомпилировать как библиотеку классов; winexe - исполнительный файл Windows
::/res:"file.mp3" - внедрить в ресурсы внешний файл
::/debug - отображать отладочную информацию
::/warn:0 - уровень предупреждений
::/nologo - не отображать информацию об авторских правах
:begin
"%FWExec%" /target:exe /nologo /out:"%~dpn1.exe" "%~dpnx1" 1>"%log866%" 2>&1
if %errorlevel% neq 0 (
  Call :Recode
  Echo Во время компиляции возникла ошибка
  Echo.
  Type "%log866%"
  Echo.
  (set /p key=Нажмите Y, чтобы сохранить протокол ошибок в файл: )
  if /i "!key!"=="Y" (move /y "%log1251%" "%~dp1"& del /q "%log866%") else (del /q "%log866%"& del /q "%log1251%")  
) else (del /q "%log866%")
Exit /B
 
:Recode
::Файл с кодировкой WIN-866
set FileIn=%log866%
::Результат, куда записывать OEM-1251
set FileOut=%log1251%
 ::chcp 1251> nul
for /f "delims=" %%a in (%FileIn%) do (
  if not defined cpReady (
    chcp 1251> nul
    set CpReady=True
  )
  call :convert "%%a"
)
chcp 866> nul
exit /B
 
:convert
echo %~1>>"%FileOut%"
Exit /B


P.S. Скрипт для msbuild - упрощённый (лог-файл не ведётся).

Кликните здесь для просмотра всего текста
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
@echo off& :: by Alex Dragokas -02.03.2017-
::Помощник компиляции исходников C#
Setlocal EnableDelayedExpansion EnableExtensions
 
::Задайте здесь полный путь к компилятору, либо будет предложен выбор
::set FWExec=%SystemRoot%\Microsoft.NET\Framework\v3.5\msbuild.exe
 
Echo Помощник компиляции проектов .NET (.sln)
Echo.
if "%1"=="" (
  Echo Перетяните исходный файл .cs на этот скрипт ^(Drag ^& Drop^),
  Echo или задайте его как аргумент, например "%~nx0" "c:\temp\source.sln"
  Echo.& pause& Goto :eof
)
 
::Если путь указан в шапке
if Defined FWExec goto :begin
 
Echo Выберите версию FrameWork, с помощью которой по-умолчанию будет компилироваться исходник
Echo.
for /f "delims=" %%A in ('dir /b /s /a:-d "%windir%\Microsoft.NET\msbuild.exe"') do (
  Set /A n+=1
  Set FW!n!=%%A
  for /f "tokens=4,5 delims=" %%r in ("%%A") do (
    echo %%r|find "64">nul
    if !errorlevel!==0 (set arch=x64) else (set arch=x32)
    echo !n!. !arch! %%s
  )
)
if not Defined n (Echo На компьютере не обнаружен установленный FrameWork& Echo.& pause& goto :eof)
Echo.
:FWenter
Set /p FWver="Ожидаю ввода: "
if "%FWver%"=="" Goto :FWenter
if %FWver% LSS 0 Goto :FWenter
if %FWver% GTR %n% Goto :FWenter
set FWExec=!FW%FWver%!
 
SetLocal DisableDelayedExpansion
 
:begin
"%FWExec%" "%~1" /t:rebuild /p:Configuration=Debug /p:Platform="any cpu" /clp:Nosummary
if %errorlevel% neq 0 (
  echo.
  Echo ^>^>^> Во время компиляции возникла ошибка ^<^<^<
  pause>NUL
)
Вложения
Тип файла: zip Compiler.zip (2.3 Кб, 292 просмотров)
Тип файла: zip msbuild_me2.zip (1.1 Кб, 114 просмотров)
5
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
06.01.2013, 02:03  [ТС] 18
Отслеживание зависшего процесса и его перезапуск с указанным приоритетом
Автор: Dragokas

Все параметры настраиваемы (см. начало кода и спойлер). Комментарии писал на английском, уж как есть.

Принцип работы:
Задаем имя процесса(ов), который будем отслеживать.
В системе могут быть несколько процессов с одинаковым именем. Скрипт идентифицирует их по PID и не путается.
Если найден процесс с указанным именем и статусом "Not responding",
начинается валидация (повторная проверка этого статуса на протяжении заданного времени и указанное кол-во раз).
(а вдруг процесс подвис на секунду - не "убивать" же его из-за этого!!!)
Если все проверки позитивны, ищем полный путь к процессу по номеру его Process ID (используется инструментарий WMIC).
Принудительно завершаем процесс по PID.
Выжидаем указанную задержку перед повторным запуском.
Запускаем тот же процесс с указанным приоритетом в минимизированном виде.

Настройки:

Можно задавать такие паузы (в мс.):
1) между проверками статуса "Не отвечает".
2) продолжительность времени и кол-во дополнительных проверок валидации статуса за это время.
3) перед новым запуском завершенного приложения.

Запуск в минимизированном виде:
1 - Да, 0 - Нет.

Приоритеты запускаемого процесса:
1 - низкий
2 - ниже среднего
3 - средний
4 - выше среднего
5 - высокий
6 - в реальном времени

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


Upd.3.
Подправлено получение пути к процессу из правильного свойства WMIC Process (ExecutablePath вместо CommandLine).
Добавлена принудительная минимизация окна с помощью утилиты NirCMD (некоторые программы восстанавливают окно при использовании Start /MIN).
В силу особенностей NirCMD процесс нужно вручную задавать на выбор: по имени класса или по имени (части имени) окна.
Добавлен автоперезапуск процесса, если через 10 сек. после его запуска оно не набрало указанное число КБайт в оперативной памяти.

Скрипт обсуждается здесь Отслеживание зависания (состояния "не отвечает") программы и её перезапуск
Вложения
Тип файла: rar Not Responding.rar (3.5 Кб, 623 просмотров)
Тип файла: rar Not Responding3.rar (111.3 Кб, 789 просмотров)
7
Модератор
Эксперт JS
5202 / 2084 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
08.01.2013, 21:45 19
Помощь по всем командам вашей версии Windows / DOS

Развврнуть код...
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
@echo off
setlocal enabledelayedexpansion
if exist "help.txt" (del help.txt)
help>>help.txt
del help2.txt
FOR /F "usebackq" %%a IN ("help.txt") DO (
 set string=%%~a
 if "!string:~0,1!"=="A" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="B" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="C" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="D" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="E" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="F" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="G" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="H" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="I" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="J" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="K" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="L" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="M" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="N" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="O" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="P" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="Q" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="R" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="S" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="T" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="U" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="V" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="W" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="X" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="Y" (echo !string!>>help2.txt)
 if "!string:~0,1!"=="Z" (echo !string!>>help2.txt)
)
del help.txt
FOR /F "usebackq tokens=1,2*" %%a IN ("help2.txt") DO (
 echo ====================>>help.txt
 echo HELP FOR %%a>>help.txt
 echo %%a
 %%a /?>>help.txt
)
echo OK
pause>nul
timeout /t 1 /NOBREAK>nul

После запуска появятся два текстовых файла.
По ходу действия программа будет писать вам, какая команда сейчас обрабатывается.
HELP2 - список доступных вам команд.
HELP - собственно справка по каждой из них.
5
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
15.01.2013, 02:20  [ТС] 20
Прогресс-бар копирования файлов
Автор: Ris

Взято из этой темы.
Версия 1.5
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
@echo off
::Первый пааметр - это откуда копировать(путь у папке)
::Второй параметр - это куда копировать(путь у папке)
::Третий параметр - это надо ли копировать вложенный папки (+s - если надо, -s если не надо)
::Четвертый параметр - это что копировать(расширение файлов без точки, не указывайте - если все файлы)
if "%~1"=="" goto :EOF
set otkyda=%~1
if "%~2"=="" goto :EOF
set kyda=%~2
if /i "%~3"=="+s" (set s=^/s) else (set s=)
if "%~4"=="" (set pac=^*) else (set pac=%~4)
setlocal enabledelayedexpansion
set /a q=0
echo Copy...0%%
echo °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
cd /d "%~1"
for /f "tokens=*" %%i in ('dir /a:-d /b /-c %s% "*.%pac%"') do (set /a sall+=%%~zi)
for /f "tokens=*" %%i in ('dir /a:-d /b /-c %s% "*.%pac%"') do (call :mycopy "%%i" %%~zi)
cls
echo Copy...100%%
echo ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
goto :EOF
exit
:mycopy
if not %2 LSS 200000000 (echo File size is larger than 200MB.&pause&exit)
set p=%~dp1
call set x=%%p:%otkyda%=%%
xcopy /q /s /y %1 "%kyda%%x%" > nul
set /a proc=10*%2/(%sall%/1000)
if %2 LSS 10000 set /a proc=%2*10000/%sall%
set /a q=%q%+%proc%
cls
echo Copy...%q:~0,-2%.%q:~-2%%%
set /a qb=(%q%*80)/10000
if "%qb%"=="%qb_pr%" (echo %bar%%barx%&exit /b)
set /a qbx=80-%qb%
set bar=
set barx=
for /l %%i in (1,1,%qb%) do (set bar=!bar!Ы)
for /l %%i in (1,1,%qbx%) do (set barx=!barx!°)
echo %bar%%barx%
set qb_pr=%qb%
exit /b

Юзаем, например, так:
Bash
1
copybar "C:\temp" "%cd%\temp" +s rar
2
15.01.2013, 02:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2013, 02:20
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru