Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Операционные системы общие вопросы
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2025, 13:43   #351
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,926
По умолчанию

CMD/BAT: Управляющие последовательности ANSI/ECMA-48

Управляющие последовательности ANSI — символы, встраиваемые в текст, для управления форматом, цветом и другими опциями вывода в текстовом терминале.

В Microsoft Windows поддержка управляющих последовательностей ANSI появилась начиная с Windows 10.

Для управления выводом текста в консоль используются специальные ESC-коды. Выглядят они так:

ESC[<параметры><буква-команда>

ESC[ — признак начала управляющей последовательности. ESC — непечатный символ с кодом 27 (U+001B). Набирается посредством Alt+27 или Alt+027, на экране выглядит как вопросик в квадрате или иначе, в зависимости от редактора.
<параметры> — цифры (иногда с ; ), указывают режим или количество.
<буква-команда> — финализирующий символ, указывающий какое именно действие.

Так как набирать непечатный символ ESC не очень удобно, да и скопировать текст с непечатными символами может быть проблематично (допустим, невозможно поделиться кодом на форуме), то можно программно получить префикс для CSI-кодов. Вот код для получения CSI-префикса:

Код:
:: Получаем префикс CSI = ESC + [
for /f "delims=" %%a in ('echo prompt $E[^| cmd /q /d /k') do set "CSI=%%a"
Arigato на форуме Ответить с цитированием
Старый 05.09.2025, 13:44   #352
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,926
По умолчанию

Цвет и начертание текста

Список поддерживаемых CSI-кодов:

CSI30-37m - цвет текста (палитра 8)
0 - Black
1 - Red
2 - Green
3 - Yellow
4 - Blue
5 - Magenta
6 - Cyan
7 - White

CSI90-97m - яркий цвет текста (палитра 8)
CSI38;5;0-255m - цвет текста (палитра 256)
0–7: базовые цвета
8–15: яркие
16–231: 6×6×6 RGB-куб
232–255: градации серого

CSI38;2;R;G;Bm - RGB-цвет текста
R, G, B = 0-255
CSI39m - цвет текста по умолчанию
CSI40-47m - цвет фона (палитра 8)
CSI100-107m - яркий цвет фона (палитра 8)
CSI48;5;0-255m - цвет фона (палитра 256)
CSI48;2;R;G;Bm - RGB-цвет фона
CSI49m - цвет фона по умолчанию
CSI1m - яркий
CSI22m - яркий откл.
CSI7m - инверсный (негатив)
CSI27m - инверсный откл.
CSI4m - подчеркнутый
CSI24m - подчеркнутый откл.
Код CSI53m (надчеркнутый) не поддерживается. Имитация: выводить строкой выше подчеркнутый
Код CSI51m (обрамленный) не поддерживается. Имитация: использовать подчеркнутый и вертикальные слеши |
Код CSI8m (скрытый) не поддерживается. Имитация: CSI30;40m (черный текст на черном фоне или другие совпадающие цвета). Скрытый текст не виден в консоли, но может быть скопирован в буфер обмена посредством выделения
CSI0m - выключение всех атрибутов

Комбинирование
CSI-коды можно комбинировать через ;
Например:
Код:
echo %CSI%42;96mГолубой на зеленом (комбинирование)%CSI%0m
Демонстрационный пример:

Код:
@echo off
setlocal enabledelayedexpansion
cls

:: Получаем префикс CSI = ESC + [
for /f "delims=" %%a in ('echo prompt $E[^| cmd /q /d /k') do set "CSI=%%a"

:: CSI30-37m - цвет текста (палитра 8)
:: 0 - Black
:: 1 - Red
:: 2 - Green
:: 3 - Yellow
:: 4 - Blue
:: 5 - Magenta
:: 6 - Cyan
:: 7 - White 
:: CSI39m - цвет текста по умолчанию
echo %CSI%31mКрасный текст%CSI%39m

:: CSI90-97m - яркий цвет текста (палитра 8)
echo %CSI%91mЯрко-красный текст%CSI%39m

:: CSI40-47m - цвет фона (палитра 8)
:: CSI49m - цвет фона по умолчанию
echo %CSI%44mСиний фон%CSI%49m

:: CSI100-107m - яркий цвет фона (палитра 8)
echo %CSI%104mЯрко-синий фон%CSI%49m

:: Комбинирование через ;
echo %CSI%42;96mГолубой на зеленом (комбинирование)%CSI%39;49m

:: CSI1m - яркий
:: CSI22m - яркий откл.
echo %CSI%32mВыделение текста %CSI%1mярким цветом%CSI%22m и обычный%CSI%39m

:: CSI7m - инверсный (негатив)
:: CSI27m - инверсный откл.
:: CSI0m - выключение всех атрибутов
echo %CSI%43;95mТекст %CSI%7m инверсный (негатив) %CSI%27m и обычный%CSI%0m

:: CSI4m - подчеркнутый
:: CSI24m - подчеркнутый откл.
echo %CSI%4mПодчеркнутый%CSI%24m

:: Код CSI53m (надчеркнутый) не поддерживается
:: Имитация: выводить строкой выше подчеркнутый
echo.
echo Код CSI%CSI%4m53m (надчеркн%CSI%24mутый) не поддерживается, но можно имитировать
echo Пример надчеркнутого текста

:: Код CSI51m (обрамленный) не поддерживается
:: Имитация: использовать подчеркнутый и вертикальные слеши |
echo   %CSI%4m                   %CSI%24m
echo   %CSI%4m^|Обрамленный текст^|%CSI%24m
echo.

:: Код CSI8m (скрытый) не поддерживается
:: Имитация: CSI30;40m (черный текст на черном фоне или другие совпадающие цвета)
:: Скрытый текст не виден в консоли, но может быть скопирован в буфер обмена посредством выделения
echo Скрытый невидимый текст тут: %CSI%30;40mсекретный код 123%CSI%0m
echo Можно выделить область со скрытым текстом: %CSI%37;47mсекретный код 123%CSI%0m

:: CSI38;5;0-255m - цвет текста (палитра 256)
:: 0-7: базовые цвета
:: 8-15: яркие
:: 16-231: 6?6?6 RGB-куб
:: 232-255: градации серого
echo.
echo 256-цветная палитра текста:
for /L %%i in (0,1,255) do (
    set /A "nl=%%i %% 16"
    <nul set /p ="%CSI%38;5;%%im#"
    if !nl! EQU 15 echo.
)
echo %CSI%39m

:: CSI48;5;0-255m - цвет фона (палитра 256)
echo 256-цветная палитра фона:
for /L %%i in (0,1,255) do (
    set /A "nl=%%i %% 16"
    <nul set /p ="%CSI%48;5;%%im %CSI%49m"
    if !nl! EQU 15 echo.
)

:: CSI38;2;R;G;Bm - RGB-цвет текста
:: R, G, B = 0-255
echo.
echo RGB-цвет текста:
for /L %%i in (10,2,248) do (
    <nul set /p ="%CSI%38;2;%%i;0;0m#"
)
echo %CSI%39m

:: CSI48;2;R;G;Bm - RGB-цвет фона
echo.
echo RGB-цвет фона:
for /L %%i in (10,2,248) do (
	set /a b=255-%%i
    <nul set /p ="%CSI%48;2;0;%%i;!b!m "
)
echo %CSI%49m

pause
Скриншот примера во вложении.
Изображения
Тип файла: png font.png (66.5 Кб, 0 просмотров)
Arigato на форуме Ответить с цитированием
Старый 05.09.2025, 13:45   #353
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,926
По умолчанию

Управление курсором и очисткой

Список поддерживаемых CSI-кодов:

CSIH / CSIf - курсор в левый верхний угол
CSI#;#H - в строку;колонку (позиция курсора, левый верхний угол - 1;1)
CSI#;#f - то же самое (альтернативная форма)

CSI#A - вверх # строк
CSI#B - вниз # строк
CSI#C - вправо # колонок
CSI#D - влево # колонок
CSI#E - на начало строки, ниже на #
CSI#F - на начало строки, выше на #
CSI#G - в колонку #
CSI#H - в начало строки #

CSIs - сохранить позицию курсора
CSIu - восстановить позицию курсора

CSI6n - выводит текущее положение курсора в формате ^[[n;mR, где n — строка, m — столбец
Ответ попадает в буфер ввода. Пока непонятно, как его считать...

CSI?25l - скрыть курсор
CSI?25h - показать курсор

CSI#T - прокрутить экран вверх на #
Работает не совсем понятно...
CSI#S - прокрутить экран вниз на #

CSIJ - очистка экрана (по умолчанию от курсора до конца, аналог CSI0J)
CSI1J - очистка экрана от начала экрана до курсора
CSI2J - очистка всего экрана
Комбинация CSI2J+CSIH - аналог команды CLS

CSIK - очистка строки (по умолчанию от курсора до конца, аналог CSI0K)
CSI1K - от начала строки до курсора
CSI2K - очистка всей строки

CSI#L - вставить # пустых строк
CSI#M - удалить # строк
CSI#P - удалить (со смещением в строке) # символов в текущей строке
CSI#X - очистить (без смещения в строке) # символов в текущей строке
CSI#d - перемещает курсор вниз на # строк?

Демонстрационный пример:

Код:
@echo off
setlocal enabledelayedexpansion
cls

:: Получаем префикс CSI = ESC + [
for /f "delims=" %%a in ('echo prompt $E[^| cmd /q /d /k') do set "CSI=%%a"

:: CSIH / CSIf - курсор в левый верхний угол
echo Первая строка текста
echo %CSI%HВторая

pause
cls

:: CSI#;#H - в строку;колонку (позиция курсора, левый верхний угол - 1;1)
for /L %%i in (1,1,15) do (
	echo %CSI%%%i;%%iH%%i
)

:: CSI#;#f - то же самое (альтернативная форма)
for /L %%i in (15,-1,1) do (
	set /a y=30-%%i
	echo %CSI%%%i;!y!f%%i
)

pause
cls

:: CSI#A - вверх # строк
:: CSI#B - вниз # строк
:: CSI#C - вправо # колонок
:: CSI#D - влево # колонок
:: CSI#E - на начало строки, ниже на #
:: CSI#F - на начало строки, выше на #
:: CSI#G - в колонку #
:: CSI#H - в начало строки #
echo %CSI%20C[1]%CSI%10B[2]%CSI%10D[3]%CSI%5A[4]%CSI%10E[5]%CSI%5F[6]%CSI%5G[7]%CSI%3H[8]

pause
cls

:: CSIs - сохранить позицию курсора
:: CSIu - восстановить позицию курсора
echo %CSI%10;8HHello, %CSI%s
echo %CSI%HGoodby...
echo %CSI%uWorld.

pause
cls

:: CSI6n - выводит текущее положение курсора в формате ^[[n;mR, где n — строка, m — столбец
:: Ответ попадает в буфер ввода. Пока непонятно, как его считать...
echo %CSI%15;15fOK%CSI%6n
set /p pos=Положение курсора: 
echo %pos:~2,-1%

pause
cls

:: CSI?25l - скрыть курсор
set /p name=%CSI%?25lВведите свое имя: 

:: CSI?25h - показать курсор
echo Привет, %name%%CSI%?25h
set /p age=Ваш возраст: 

pause
cls

dir %windir%
pause

:: CSI#T - прокрутить экран вверх на #
:: Работает не совсем понятно...
echo %CSI%5T
pause

:: CSI#S - прокрутить экран вниз на #
echo %CSI%20S

pause
cls

dir %windir%
pause

:: CSIJ - очистка экрана (по умолчанию от курсора до конца, аналог CSI0J)
echo %CSI%10A%CSI%J

pause
cls

dir %windir%
:: CSI1J - очистка экрана от начала экрана до курсора
echo %CSI%10A%CSI%1J

pause

:: CSI2J - очистка всего экрана
echo %CSI%2J

dir %windir%
pause

:: CSI2J+CSIH - аналог команды CLS
echo %CSI%2J%CSI%HCLS

pause

:: CSIK - очистка строки (по умолчанию от курсора до конца, аналог CSI0K)
echo Пример длинной строки в которой мы удалим конец строки после ее вывода на экран%CSI%25D%CSI%K

pause

:: CSI1K - от начала строки до курсора
echo Пример длинной строки в которой мы удалим начало строки после ее вывода на экран%CSI%25D%CSI%1K

pause

:: CSI2K - очистка всей строки
echo Пример длинной строки, которую мы удалим целиком%CSI%2K

:: CSI#L - вставить # пустых строк
:: CSI#M - удалить # строк
:: CSI#P - удалить (со смещением в строке) # символов в текущей строке
:: CSI#X - очистить (без смещения в строке) # символов в текущей строке
:: CSI#d - перемещает курсор вниз на # строк?

pause

Последний раз редактировалось Arigato; 05.09.2025 в 14:28.
Arigato на форуме Ответить с цитированием
Старый 05.09.2025, 13:47   #354
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,926
По умолчанию

Применяем CSI-коды в приглашении командной строки

CSI-коды отлично работают в промпте. Вот пример батника, который поменяет цвет приглашения на ярко-желтый:

Код:
@echo off

:: Получаем префикс CSI = ESC + [
for /f "delims=" %%a in ('echo prompt $E[^| cmd /q /d /k') do set "CSI=%%a"

:: Ярко-желтое приглашение командной строки
prompt %CSI%93m$P$G%CSI%0m
Скриншот примера во вложении.
Изображения
Тип файла: png prompt.png (22.4 Кб, 0 просмотров)
Arigato на форуме Ответить с цитированием
Старый 05.09.2025, 13:47   #355
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,926
По умолчанию

Вывод текста с CSI-кодами из файла

Имеется возможность сохранить текст с управляющими последовательностями ANSI в файл для последующего вывода в консоль командой type.
Особенность: CSI-код в файле выглядит таким образом: ESC[, где ESC - непечатный символ с кодом 27 (0x1B). Набирается посредством Alt+27 или Alt+027, на экране выглядит как вопросик в квадрате или иначе, в зависимости от редактора.
Файл необходимо сохранять в однобайтовой кодировке OEM 866 для корректного отображения русских букв.

Простой пример для демонстрации:

Код:
@echo off
echo Hello, World.
type example.ans
pause
Выводит на экран содержимое файла example.ans. Интересно отметить, что внутри файла example.ans добавлена очистка экрана. В итоге надпись "Hello, World.", которая выведена раньше печати данного файла, будет стерта.

По сути ans-файл это обычный текстовый файл, но с добавлением управляющих последовательностей ANSI. Редактируется в любом блокноте, позволяющим вставлять непечатный символы. Использование расширение .ans лишь информирует о том, что там не плоский текст. А так расширение файла роли не играет.

Файл example.ans во вложении (извлечь из архива).
Изображения
Тип файла: png show.png (18.7 Кб, 0 просмотров)
Вложения
Тип файла: zip example.zip (612 байт, 0 просмотров)
Arigato на форуме Ответить с цитированием
Старый 05.09.2025, 13:48   #356
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,926
По умолчанию

Скрытый ввод текста (ввод пароля)

Используя CSI-коды можно реализовать скрытый ввод пароля. Следующий код позволяет это сделать:

Код:
:: Скрытый ввод пароля
set /p password="Ввыдите пароль: %CSI%?25l%CSI%30;40m"
<nul set /p ="%CSI%1A%CSI%2K%CSI%0m%CSI%?25h"
Пояснение:
Код CSI30;40m устанавливает черный цвет текста на черном фоне, в итоге вводимые символы не видны.
Код CSI?25l отключает отображение курсора, в итоге не видно и количество вводимых символов.
После ввода выполняются следующие CSI-коды:
Код CSI1A подымает курсор на одну строку выше (то есть в строку, где только что вводили пароль).
Код CSI2K полностью удаляет строку. Это необходимо сделать, так как хоть пароль и не виден (черный на черном), но он остается на экране, от куда может быть скопирован в буфер обмена посредством выделения области экрана.
Код CSI0m отменяет черный текст на черном фоне.
Код CSI?25h включает отображение курсора.

Уязвимости:
1. Пароль выводится на экран черным цветом по черному фону, но фактически он там есть. Удаляется с экрана только после завершения ввода.
2. В переменной %password% сохраняется пароль в открытом виде. Желательно очистить переменную с помощью: set password=
3. Пароль остается в истории ввода. То есть если при следующем запросе ввода нажать стрелку вверх, то на ввод поступи только что введенный пароль. Пока не ясно, как это побороть...
4. Если проверка пароля происходит внутри bat-файла, то изучение исходного кода позволит раскрыть пароль.
5. Также изменение исходного кода позволит просто обойти проверку пароля.

Полноценный пример, демонстрирующий авторизацию по паролю:

Код:
@echo off
setlocal enabledelayedexpansion

:: Получаем префикс CSI = ESC + [
for /f "delims=" %%a in ('echo prompt $E[^| cmd /q /d /k') do set "CSI=%%a"

:: Скрытый ввод пароля
set /p password="Ввыдите пароль: %CSI%?25l%CSI%30;40m"
<nul set /p ="%CSI%1A%CSI%2K%CSI%0m%CSI%?25h"

:: Проверка пароля
if "%password%"=="123" (
	set auth=1
) else (
	set auth=
)

:: На всякий случай очищаем пароль
set password=

:: Проверка авторизации
if "%auth%"=="1" (
	echo %CSI%92mДоступ РАЗРЕШЕН%CSI%39m
) else (
	echo %CSI%91mДоступ ЗАПРЕЩЕН%CSI%39m
)
Изображения
Тип файла: png password.png (13.1 Кб, 0 просмотров)
Arigato на форуме Ответить с цитированием
Старый 05.09.2025, 22:43   #357
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,926
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
3. Пароль остается в истории ввода. То есть если при следующем запросе ввода нажать стрелку вверх, то на ввод поступи только что введенный пароль. Пока не ясно, как это побороть...
Побороть эту проблему можно, если вынести ввод пароля в отдельный процесс. То есть нам нужен отдельный батник для ввода и проверки пароля, который лишь возвращается 1, если пароль верный и 0, если нет. Код auth.cmd:

Код:
@echo off

:: Скрытый ввод пароля
set /p password="Ввыдите пароль: %CSI%?25l%CSI%30;40m"
<nul set /p ="%CSI%1A%CSI%2K%CSI%0m%CSI%?25h"

:: Проверка пароля
if "%password%"=="123" (
	set auth=1
) else (
	set auth=0
)

:: Затираем пароль на всякий случай
set "password=                                                                                                             "
set "password="

:: Возвращаем флаг авторизации
exit %auth%
В основном батнике запускаем этот процесс с ожиданием его завершения и получаем код возврата:

Код:
@echo off
setlocal enabledelayedexpansion

:: Получаем префикс CSI = ESC + [
for /f "delims=" %%a in ('echo prompt $E[^| cmd /q /d /k') do set "CSI=%%a"

:: Ввод пароля
start /wait /b auth.cmd

:: Получение флага авторизации (0,1)
set auth=%errorlevel%

:: Проверка авторизации
if "%auth%"=="1" (
	echo %CSI%92mДоступ РАЗРЕШЕН%CSI%39m
) else (
	echo %CSI%91mДоступ ЗАПРЕЩЕН%CSI%39m
)
По итогу в истории ввода пароля нет.
Arigato на форуме Ответить с цитированием
Старый 06.09.2025, 12:15   #358
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,926
По умолчанию

CMD/BAT: звуки (3 разных + бонус: сигнал SOS)

Два примера, как вывести звук из батника:

Код:
@ echo off
setlocal enabledelayedexpansion

pause
echo Звуковой сигнал №1
call :beep1

pause
echo Звуковой сигнал №2
call :beep2

exit /b

:: Звуковой сигнал через символ с кодом 7 (Alt + 07)
:beep1
setlocal
0<nul set /p =[BEL]
endlocal & exit /b

:: Звуковой сигнал через choice
:beep2
echo 0y | choice /c y /n>nul
exit /b
[BEL] - это непечатный символ с кодом 7. В форум его вставить нельзя, так что работающий пример качайте из вложения.

Подпрограмма beep1 выводит звук через символ с кодом 7.
Подпрограмма beep2 выводит звук через команду choice.

Не факт что везде будет работать, не проверял, но у меня оба метода работают и звуки разные.


Произвольный звуковой сигнал

Еще один вариант воспроизвести звук, причем произвольный:
Код:
powershell -c "[console]::beep(800,200)"
800 - частота в Гц (от 37 до 32767).
200 - продолжительность в мс (от 1).


Сигнал SOS

А вот и пример реализации сигнала SOS через звуки и мигание экраном:

Код:
@ echo off
setlocal enabledelayedexpansion

cls
title Сигнал SOS

:sos
call :M_S
call :M_O
call :M_S
call :pause 2
echo.
goto sos

exit /b

:: O: ---
:M_O
call :dash
call :dash
call :dash
exit /b

:: S: ...
:M_S
call :dot
call :dot
call :dot
exit /b

:: Точка (Морзе)
:dot
setlocal
0<nul set /p =.
color f0
call :beep2
color 07
endlocal & exit /b

:: Тире (Морзе)
:dash
setlocal
0<nul set /p =-
color f0
call :beep2
call :pause
color 07
endlocal & exit /b

:: Звуковой сигнал через choice
:beep2
echo 01 | choice /c 1 /n>nul
exit /b

:: Задержка в сек (0 - короткая задержка)
:pause
setlocal
set t=%1
if "%t%"=="" set t=0
timeout /t %t% >nul
endlocal & exit /b
Так как звук подается вызовом подпрограммы beep2, которая работает через choice, то и непечатных символов тут нет. Можно копировать код прямо с форума.
Вложения
Тип файла: zip beep.zip (341 байт, 0 просмотров)

Последний раз редактировалось Arigato; 06.09.2025 в 14:40.
Arigato на форуме Ответить с цитированием
Старый 06.09.2025, 14:53   #359
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,926
По умолчанию

Имитация сообщения азбукой Морзе:

Код:
@ echo off
setlocal enabledelayedexpansion

cls
title Morse

call :morse_init

:sos
call :morse "SOS ALEX"
call :morse "POSITION 34N 75S"
goto sos

:: Азбука Морзе
:morse
setlocal
set "str=%~1"
if not defined str endlocal & exit /b
set "str=%str: =_%"
set "i=0"
:morse_1
set "c=!str:~%i%,1!"
if not defined c (
	call :pause 2
	echo.
	endlocal & exit /b
)
0<nul set /p "=%c%"
if "%c%"=="_" (
	call :pause 1
) else (
	call :morse_echo "%c%"
	call :pause
	call :pause
)
set /a "i+=1"
goto morse_1

:: Вывод заданного символа
:morse_echo
setlocal
set "m=!M_%~1!"
if not defined m endlocal & exit /b
set "i=0"
:morse_echo_1
set "c=!m:~%i%,1!"
if not defined c endlocal & exit /b
if "%c%"=="." call :morse_dot
if "%c%"=="-" call :morse_dash
set /a "i+=1"
goto morse_echo_1

:: Таблица азбуки Морзе
:morse_init
set "M_A=.-"
set "M_B=-..."
set "M_C=-.-."
set "M_D=-.."
set "M_E=."
set "M_F=..-."
set "M_G=--."
set "M_H=...."
set "M_I=.."
set "M_J=.---"
set "M_K=-.-"
set "M_L=.-.."
set "M_M=--"
set "M_N=-."
set "M_O=---"
set "M_P=.--."
set "M_Q=--.-"
set "M_R=.-."
set "M_S=..."
set "M_T=-"
set "M_U=..-"
set "M_V=...-"
set "M_W=.--"
set "M_X=-..-"
set "M_Y=-.--"
set "M_Z=--.."
set "M_1=.----"
set "M_2=..---"
set "M_3=...--"
set "M_4=....-"
set "M_5=....."
set "M_6=-...."
set "M_7=--..."
set "M_8=---.."
set "M_9=----."
set "M_0=-----"
exit /b

:: Точка (Морзе)
:morse_dot
color f0
powershell -c "[console]::beep(700,100)"
color 07
exit /b

:: Тире (Морзе)
:morse_dash
color f0
powershell -c "[console]::beep(700,300)"
color 07
exit /b

:: Задержка в сек (0 - короткая задержка)
:pause
if "%~1"=="" (
	timeout /t 0 >nul
) else (
	timeout /t %~1 >nul
)
exit /b
Arigato на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для сохранения листов в отдельных файлах Neo007 Microsoft Office Excel 2 22.10.2008 18:16
Русская раскладка в bat-файлах snake-as Microsoft Office Excel 3 16.10.2008 17:59
Сортировка в файлах и записях. Паскаль Elizabeth Black Помощь студентам 2 27.05.2008 21:51
Помогите с вопросами о файлах Дима82 Помощь студентам 5 26.05.2008 19:49
Помогите, пожалуйста, решить задачу по файлах sheva_ser Паскаль, Turbo Pascal, PascalABC.NET 1 27.03.2008 19:36