Mark_Titov
Ну ты же помнишь, что я писал про удаление старых файлов. Они будут удаляться время от времени.
Схема удаления такая: проводятся выборы (чтоб не слишком часто пытаться удалять), начинаем удалять если текущее количество минут >30, удаляем все файлы, дата и час изменения которых не равно текущему.
Так что каждый час файлы будут удалять, конечно в случае, если кто-то чатится.
Сделал приватные комнаты:
[more=Код]
Код: @echo off
color 1F
title Chat v 1.1
cls
if /i "%~1" equ "talk_widget" goto:talker
echo.
echo Введите номер комнаты для чата в числовом формате (1-999):
set /p "chat=>"
if not defined chat echo Вы ввели не правильный номер комнаты. & exit /b
set "chatpath=%~dp0\%chat%"
setlocal ENABLEDELAYEDEXPANSION
if exist %chatpath% (
if exist %chat%_pass (
call:setpass "Введите пароль для доступа в приватный чат:"
set /p pass1=<%chat%_pass
if "!pass!" neq "!pass1!" echo Вы ввели не правильный пароль для приватного чата. & pause & exit /b
)
) else (
call:setpass "Введите пароль (пустой пароль - публичный чат):"
if defined pass (echo !pass!>%chat%_pass)
)
setlocal DISABLEDELAYEDEXPANSION
echo.
echo Придумайте свое имя для чат (А-Я \ A-Z):
set /p "nick=>"
if not defined nick echo Вы не ввели имя. & exit /b
set "msgflist=%TEMP%\chatlist.txt"
cls
title "| Chat: %chat% | User: %nick% |"
1>nul 2>&1 md "%chatpath%"
>"%msgflist%" 2>nul dir /b /a-d /od /tw "%chatpath%\*" || >"%msgflist%" echo BatChat
if exist %chat%_history type %chat%_history
start call %0 talk_widget
:listener_loop
for /f "tokens=*" %%a in ('dir /b /a-d /od /tw "%chatpath%\*" 2^>nul ^| findstr /v /G:"%msgflist%" 2^>nul') do (
echo %%~a>>"%msgflist%"&type "%chatpath%\%%~a"
)
call:dustman || call:wait 1000
goto:listener_loop
:talker
cls
call title "| Комната чата: %chat% | Пользователь: %nick% |"
call:getmsgfname
echo [%time:~0,-3%] пользователь "%nick%" присоединился к чату.>"%msgfname%"
echo. >>"%msgfname%"
call:cs_in
echo [%time:~0,-3%] пользователь "%nick%" присоединился к чату.>>%chat%_history
echo. >>%chat%_history
call:cs_out
:talker_loop
cls
echo.
echo Ваш текст сообщения:
echo.
set "msg="
set /p msg=^>
if not defined msg goto:talker_loop
call:getmsgfname
echo [%time:~0,-3%] - %nick%: >"%msgfname%"
echo - %msg% >>"%msgfname%"
echo. >>"%msgfname%"
call:cs_in
start /min sndRec32.exe /play /close c:\WINDOWS\Media\chimes.wav 1>nul 2>nul
echo [%time:~0,-3%] - %nick%: >>%chat%_history
echo - %msg% >>%chat%_history
echo. >>%chat%_history
call:cs_out
goto talker_loop
:cs_in
if exist "%chat%_cs" call:wait 100 & goto:cs_in
echo %RANDOM% >%chat%_cs
exit /b
:cs_out
1>nul 2>&1 del /f /q %chat%_cs
exit /b
:wait
1>nul 2>&1 ping -n 1 -w %1 127.255.255.255
exit /b
:dustman
set "cleanborder=6553"
if %RANDOM% gtr %cleanborder% exit /b 1
if %time:~3,2% lss 30 exit /b 2
if exist "%chat%_dust.lck" exit /b 3
echo dustman >"%chat%_dust.lck"
for /f "skip=4 tokens=1,4" %%a in ('dir /-c /a-d /od /tw "%chatpath%\*" 2^>nul ^| findstr /b /v /c:"%date% %time:~0,3%" 2^>nul') do if exist "%chatpath%\%%~b" 1>nul 2>&1 del /f /q "%chatpath%\%%~b"
1>nul 2>&1 del /f /q "%chat%_dust.lck"
exit /b
:getmsgfname
set "msgfname=%chatpath%\%date:.=%%time::=%%RANDOM%"
if exist "%msgfname%" goto:getmsgfname
exit /b
:setpass
echo.&echo.%~1
set "pass="
set /p "pass=>"
exit /b
Ну ты же помнишь, что я писал про удаление старых файлов. Они будут удаляться время от времени.
Схема удаления такая: проводятся выборы (чтоб не слишком часто пытаться удалять), начинаем удалять если текущее количество минут >30, удаляем все файлы, дата и час изменения которых не равно текущему.
Так что каждый час файлы будут удалять, конечно в случае, если кто-то чатится.
Сделал приватные комнаты:
[more=Код]
Код: @echo off
color 1F
title Chat v 1.1
cls
if /i "%~1" equ "talk_widget" goto:talker
echo.
echo Введите номер комнаты для чата в числовом формате (1-999):
set /p "chat=>"
if not defined chat echo Вы ввели не правильный номер комнаты. & exit /b
set "chatpath=%~dp0\%chat%"
setlocal ENABLEDELAYEDEXPANSION
if exist %chatpath% (
if exist %chat%_pass (
call:setpass "Введите пароль для доступа в приватный чат:"
set /p pass1=<%chat%_pass
if "!pass!" neq "!pass1!" echo Вы ввели не правильный пароль для приватного чата. & pause & exit /b
)
) else (
call:setpass "Введите пароль (пустой пароль - публичный чат):"
if defined pass (echo !pass!>%chat%_pass)
)
setlocal DISABLEDELAYEDEXPANSION
echo.
echo Придумайте свое имя для чат (А-Я \ A-Z):
set /p "nick=>"
if not defined nick echo Вы не ввели имя. & exit /b
set "msgflist=%TEMP%\chatlist.txt"
cls
title "| Chat: %chat% | User: %nick% |"
1>nul 2>&1 md "%chatpath%"
>"%msgflist%" 2>nul dir /b /a-d /od /tw "%chatpath%\*" || >"%msgflist%" echo BatChat
if exist %chat%_history type %chat%_history
start call %0 talk_widget
:listener_loop
for /f "tokens=*" %%a in ('dir /b /a-d /od /tw "%chatpath%\*" 2^>nul ^| findstr /v /G:"%msgflist%" 2^>nul') do (
echo %%~a>>"%msgflist%"&type "%chatpath%\%%~a"
)
call:dustman || call:wait 1000
goto:listener_loop
:talker
cls
call title "| Комната чата: %chat% | Пользователь: %nick% |"
call:getmsgfname
echo [%time:~0,-3%] пользователь "%nick%" присоединился к чату.>"%msgfname%"
echo. >>"%msgfname%"
call:cs_in
echo [%time:~0,-3%] пользователь "%nick%" присоединился к чату.>>%chat%_history
echo. >>%chat%_history
call:cs_out
:talker_loop
cls
echo.
echo Ваш текст сообщения:
echo.
set "msg="
set /p msg=^>
if not defined msg goto:talker_loop
call:getmsgfname
echo [%time:~0,-3%] - %nick%: >"%msgfname%"
echo - %msg% >>"%msgfname%"
echo. >>"%msgfname%"
call:cs_in
start /min sndRec32.exe /play /close c:\WINDOWS\Media\chimes.wav 1>nul 2>nul
echo [%time:~0,-3%] - %nick%: >>%chat%_history
echo - %msg% >>%chat%_history
echo. >>%chat%_history
call:cs_out
goto talker_loop
:cs_in
if exist "%chat%_cs" call:wait 100 & goto:cs_in
echo %RANDOM% >%chat%_cs
exit /b
:cs_out
1>nul 2>&1 del /f /q %chat%_cs
exit /b
:wait
1>nul 2>&1 ping -n 1 -w %1 127.255.255.255
exit /b
:dustman
set "cleanborder=6553"
if %RANDOM% gtr %cleanborder% exit /b 1
if %time:~3,2% lss 30 exit /b 2
if exist "%chat%_dust.lck" exit /b 3
echo dustman >"%chat%_dust.lck"
for /f "skip=4 tokens=1,4" %%a in ('dir /-c /a-d /od /tw "%chatpath%\*" 2^>nul ^| findstr /b /v /c:"%date% %time:~0,3%" 2^>nul') do if exist "%chatpath%\%%~b" 1>nul 2>&1 del /f /q "%chatpath%\%%~b"
1>nul 2>&1 del /f /q "%chat%_dust.lck"
exit /b
:getmsgfname
set "msgfname=%chatpath%\%date:.=%%time::=%%RANDOM%"
if exist "%msgfname%" goto:getmsgfname
exit /b
:setpass
echo.&echo.%~1
set "pass="
set /p "pass=>"
exit /b