Для начала спросим пользователя ввести имя группы и свой ник. После получения имени группы и ника в строке №5 производится запуск скриптом самого себя с тремя параметрами: слово talk_widget, а также имя группы и имя пользователя.

Теперь выводим в заголовке окна название группы и имя пользователя (строка №3). Если существует файл с именем %chat%_history, печатаем его содержимое на экран (строка №4). Далее в цикле считываем содержимое файла %chat% и сравниваем его с тем, что было в предыдущем считывании. Если содержимое файла изменилось — печатаем его на экран.

Изначально код имеет следующую структуру: при запуске проверяются параметры, если первым параметром идёт слово «talk_widget», то скрипт выполняет код, относящийся к отправке текста. При отсутствии такового параметра, код выполняет функцию получения и отображения данных. Изначально производится запуск скрипта без параметров, он спрашивает имя группы и имя пользователя, запускает второй процесс с параметром «talk_widget», а сам начинает печатать содержимое чат-группы.

Теперь о том, как работает код принимающий ввод от пользователя. Он сперва модифицирует заголовок окна (строка №5). Затем печатает в файл последней реплики сообщение-уведомление о своём подключении и дописывает сообщение к истории. При доступе к файлу реплики используется примитивный механизм критических секций (чуть ниже рассмотрим, как он работает). Далее в цикле (строки 11-19) производится получение от пользователя строк данных и их запись в файл реплики и допись в файл истории.

Функция входа в критическую секцию в файл, используемый для синхронизации, циклично записывает случайное число. До тех пор пока оно не окажется там при повторном считывании. Если на момент запуска функции файл существует, также осуществляется небольшая задержка. Задержки реализуются через ping>nul.

Функция выхода из критической секции просто удаляет файл синхронизации.

Теперь про результат
Имеется чат, обладающий следующими качествами:
1. Разделение по чат-группам (много групп и много пользователей)
2. Получение истории общения новыми участниками
3. Общение по сети (выложить скрипт в расшаренную папку и запустить с разных компьютеров)
При запуске, скрипт спрашивает имя чат-группы и имя пользователя.

После ввода требуемых данных, появляется второе окно, служащее консолью для ввода:

Теперь запущу этот же BAT-файл (он лежит в расшаренной папке) с другого компьютера сети.

После ввода того же самого имени чата и имени нового пользователя опять же появится второе окно для ввода данных на отправку.

Теперь попробуем пересылать сообщения между абонентами:

Теперь подключимся с третьего компьютера:

И увидим следующую картину:

Внимание! Замечен непонятный баг в win7 x64 при запуске скрипта из сетевой папки //***. Третья строка скрипта pushd "%~dp0" интерпретируется очень долго. Очень долго разбирается %~dp0, попробуйте просто echo %~dp0 вызвать — это как минимум странно. Если подождать минуты 2-3, то всё будет работать нормально... в WinXP таких проблем нет.
Предупреждение: при каждом запуске скрипта из сетевой папки в «Моём Компьютере» будут плодиться сетевые диски с буквами Z: Y: X: и т.д. После перезагрузки они пропадут без следа.
И конечно же ссылка на код: http://codepad.org/rvFN13LI
А также полезные ссылки:
1. Работа с путями в BAT: http://www.microsoft.com/.....
2. И вообще по написанию BAT-ников: http://www.microsoft.com/.....
UPDATE:
Если вам довелось использовать этот чат по его прямому назначению, кхе-кхе)) Будьте добры оставьте комментарий о полученных ощущениях.
Hostname lookup своими руками! читать
Хэш нам не преграда, потому что нам его не надо! читать
Startup Delayer 3.0.319: управление автозагрузкой приложений читать
Чертовски хороший LAMP: Пошаговое руководство по установке стека (L)AMP на FreeBSD читать
Tweak-7 1.0.1125: твикер для Windows 7 или как оптимизировать работу Windows 7 читать
Linux и 3G модем. Определение, настройка для подключения к сети. читать
Cистема шифрования TrueCrypt читать
Многопользовательский чат на BAT читать
Исследование: администраторы баз данных мало заботятся о безопасности читать
Оффлайновый способ хранить пароль читать
Спам — как средство передачи шифровок? читать
Мониторинг жёстких дисков при помощи SMART читать
Повышение производительности netfilter, использование ipset читать
Дело об отказавшей системе читать
Атаки на домен: завладеваем корпоративной сетью читать