Тема: CMD/BAT: ЭТО КОТ?
SET K1=ЭТО ЗДЕСЬ
SET K3=ЭТО ЗДЕСЬ
SET K2=ЭТО 12/86
SET K1=НАУКА И ЖИЗНЬ
SET K5=ЭТО 12/86
SET K4=ЭТО 12/87
SET K2=РЕАКЦИЯ ЧИТАТЕЛЕЙ
SET K7=ЭТО ЗДЕСЬ
SET K6=ЭТО СОВЕТЫ 16 И 17
SET K3=КНИГА 128 СОВЕТОВ
SET K15=ЭТО ЗДЕСЬ
SET K14=ЭТО ТОМ 1 ГЛАВА 3
SET K7=МОИ ЗАМЕТКИ
SET K31=ЭТО ЗДЕСЬ
SET K30=ЭТО НАЕЗД НА ИНФОЦЫГАН
SET K15=НА ФОРУМЕ СТАРОГО ДОСАЧто это такое? Очевидно, это кусок командного скрипта DOS/WIN. А зачем? Затем, что это БАЗА ДАНЫХ! Для той самой программы ЭТО КОТ, ссылки на которую перечислены. А это зачем? Затем, что мне показалось удобным вести по ходу дела записи о каких-то сиюминутных делах. Нет, конечно, ранее я предполагал, что на основе этой программки можно сделать более удобным форумное общение. Мол, не обмениваться случайными репликами, а высказывать свои тезисы более структурированно. Например, не "топ 10 лучших игр для меня", а "какие игры мне вспомнились сейчас и почему?".
Однако, с форумной версией ничего не получилось. Слишком высок оказался порог вхождения в игру. Ввести методу исподволь тоже оказалось сложным. Современные Сетевые технологии далеко переросли простые потребности обмена информацией. Я перенес эту игрушку в HTML (см. K62 ниже - https://gudleifr.mybb.ru/pages/kot ) и засунул на технологический форум. Но центр тяжести моментальна переключился с базы данных на эмуляцию консоли (с чем столкнулись уже первые первые современные переписчики BASIC-программы - K126 - https://gudleifr.forum2x2.ru/t18-topic#390) (
- форумная площадка попала под роскомнадзор). Но хуже того, задача автоматизации передачи результатов запуска программы обратно на форум простыми средствами не решается.

Так что, если удобная консоль - это DOS-овская, а передачу данных удобнее всего копипастить, то зачем изобретать велосипед? Хотите КОТА? Создайте в notepad файл etokot.bat:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
>>ETOKOT.TXT ECHO.
REM СЛЕДУЮЩИЕ ТРИ СТРОЧКИ ЗАМЕНИТЬ ПОСЛЕ ПЕРВОГО ЗАПУСКА
REM НА ТЕКСТ ETOKOT.TXT. В ДАЛЬНЕЙШЕМ ДОБАВЛЯТЬ И ЧИСТИТЬ
SET K1=ЭТО %~1
IF "%~1"=="" SET K1=ЭТО ЧТО-ТО НЕПОНЯТНОЕ
>>ETOKOT.TXT ECHO SET K1=%K1%
REM КОНЕЦ БАЗЫ ДАННЫХ
:P10
SET I=1
:P20
SET /P O=!K%I%!?
SET /A N=I*2
IF DEFINED K%N% GOTO P70
IF /I "%O%" NEQ "Д" GOTO P50
ECHO УРРА-А!
SET /P O=ХВАТИТ?
IF /I "%O%"=="Д" EXIT /B
GOTO P10
:P50
SET /A N+=1
SET K%N%=!K%I%!
>>ETOKOT.TXT ECHO SET K%N%=!K%N%!
SET /P O=А ЧТО ЭТО?
SET /A N=I*2
SET K%N%=ЭТО %O%
>>ETOKOT.TXT ECHO SET K%N%=!K%N%!
SET /P O=ЧЕМ ОТЛИЧАЕТСЯ?
SET K%I%=%O%
>>ETOKOT.TXT ECHO SET K%I%=!K%I%!
GOTO P10
:P70
SET /A I*=2
IF /I "%O%" NEQ "Д" SET /A I+=1
GOTO P20Можно заметить, что метки примерно соответствуют номерам BASIC-строкам. Хитрости запуска сводятся к тому, что лучше заранее решить, что будем классифицировать. Лучше, если это будут однотипные "предметы одного размера". Хорошо, весело например, протекает игра в оценку присутствующих студентов и отсутствующих преподов.
Если запустить скрипт без параметров, игра начинается так:
>etokot.bat
ЭТО ЧТО-ТО НЕПОНЯТНОЕ?с параметром (кавычки нужны если есть пробелы):
>etokot.bat "ФИЛЬМ О СТЕЛС В ГРУЗОВОМ ОТСЕКЕ"
ЭТО ФИЛЬМ О СТЕЛС В ГРУЗОВОМ ОТСЕКЕ?Дальше - все как раньше:
После УРРА-А! можно выйти:
ЭТО 12/87? Д
УРРА-А
ХВАТИТ? ДРезультат накапливается по ходу разговора в ETOKOT.TXT - см. "код" в начале поста. По окончании первого диалога этим кодом нужно заменить ввод K1:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
>>ETOKOT.TXT ECHO.
SET K1=ЭТО ЗДЕСЬ
SET K3=ЭТО ЗДЕСЬ
SET K2=ЭТО 12/86
SET K1=НАУКА И ЖИЗНЬ
SET K5=ЭТО 12/86
SET K4=ЭТО 12/87
SET K2=РЕАКЦИЯ ЧИТАТЕЛЕЙ
SET K7=ЭТО ЗДЕСЬ
SET K6=ЭТО СОВЕТЫ 16 И 17
SET K3=КНИГА 128 СОВЕТОВ
SET K15=ЭТО ЗДЕСЬ
SET K14=ЭТО ТОМ 1 ГЛАВА 3
SET K7=МОИ ЗАМЕТКИ
SET K31=ЭТО ЗДЕСЬ
SET K30=ЭТО НАЕЗД НА ИНФОЦЫГАН
SET K15=НА ФОРУМЕ СТАРОГО ДОСА
REM КОНЕЦ БАЗЫ ДАННЫХ
...После этого можно продолжить:
>etokot.bat
НАУКА И ЖИЗНЬ? Н
КНИГА 128 СОВЕТОВ? Н
МОИ ЗАМЕТКИ? Д
ЭТО ТОМ 1 ГЛАВА 3? Н
А ЧТО ЭТО? ТОМ 2 ГЛАВА 2
ЧЕМ ОТЛИЧАЕТСЯ? ПРИМЕР BASIC КОНСОЛИ
НАУКА И ЖИЗНЬ? Н
КНИГА 128 СОВЕТОВ? Н
МОИ ЗАМЕТКИ? Д
ПРИМЕР BASIC КОНСОЛИ? Д
...При этом в ETOKOT.TXT допишется (то, что я забыл при первом сеансе):
SET K29=ЭТО ТОМ 1 ГЛАВА 3
SET K28=ЭТО ТОМ 2 ГЛАВА 2
SET K14=ПРИМЕР BASIC КОНСОЛИ
SET K63=ЭТО ЗДЕСЬ
SET K62=ЭТО HTML ПРОГРАММА
SET K31=НА НОВОМ ФОРУМЕ
SET K127=ЭТО ЗДЕСЬ
SET K126=ЭТО ЗАДАЧКА 1
SET K63=В ПРОЧИХ СТАТЬЯХТ.к. все новое просто дописывается в конец ETOKOT.TXT, то можно копипастить в/из него все, что угодно. Например, черновик этого поста я пишу прямо в нем. Нужно только не забывать сохраняться перед перезапуском etokot.bat.
После накопления базы в ETOKOT.TXT ее можно привести в нужный вид. Например, я написал kotogluk.bat для преобразования базы в заголовки ГЛЮКВЫ:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
REM СЮДА ВСТАВИТЬ ETOKOT.TXT
SET K1=ЭТО ЗДЕСЬ
... не буду повторять
SET K63=В ПРОЧИХ СТАТЬЯХ
REM КОНЕЦ БАЗЫ ДАННЫХ
SET I=1
SET O1=\
:POWTOR
SET /A N=I*2
IF DEFINED K%N% GOTO WPERED
ECHO !O%I%!!K%I%:~4!
GOTO WPRAWO
:WPERED
SET O%N%=!O%I%!!K%I%!\
SET /A N+=1
SET O%N%=!O%I%!
SET /A I=N-1
GOTO POWTOR
:WPRAWO
SET /A N="I>>1<<1"
IF %N% NEQ %I% GOTO NET
SET /A I+=1
GOTO POWTOR
:NET
SET /A I/=2
IF %I% NEQ 0 GOTO WPRAWOПолучилось гораздо короче (хотя, часть информации о порядке поиска была потяряна):
\НАУКА И ЖИЗНЬ\РЕАКЦИЯ ЧИТАТЕЛЕЙ\12/87
\НАУКА И ЖИЗНЬ\12/86
\КНИГА 128 СОВЕТОВ\СОВЕТЫ 16 И 17
\МОИ ЗАМЕТКИ\ПРИМЕР BASIC КОНСОЛИ\ТОМ 2 ГЛАВА 2
\МОИ ЗАМЕТКИ\ТОМ 1 ГЛАВА 3
\НА ФОРУМЕ СТАРОГО ДОСА\НАЕЗД НА ИНФОЦЫГАН
\НА НОВОМ ФОРУМЕ\HTML ПРОГРАММА
\В ПРОЧИХ СТАТЬЯХ\ЗАДАЧКА 1
\ЗДЕСЬПо окончании работы нужно ETOKKOT.TXT (и/или etokot.bat c базой) сохранить в какой-нибудь директории.
МОРАЛЬ: При программировании DOS-скриптов можно хранить код, данные и комментарии в одном и том же текстовом файле. И копипастить в другие по необходимости. И это зачастую удобнее, чем организовывать правильный файловый обмен и разрабатывать интерфейсы.
ВОПРОС: До какого места Вы дочитали?

