Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проверка на наличие теста ДО определнного символа (http://forum.oszone.net/showthread.php?t=329677)

Darkar25 09-09-2017 23:35 2763840

Проверка на наличие теста ДО определнного символа
 
некоторые из вас уже знают что я на этом форуме задавал вопрос как выводить текст на экран после определенного символа...
Скрытый текст
http://forum.oszone.net/thread-329624.html
так вот...теперь мне нужно сделать тоже самое но наоборот...нужно проверить содержит ли n-ая строка текст...но с одним условием...проверять нужно не всю строку а вплоть до знака =...дальше него проверять не нужно иначе вся система батника ломается...ну...не вся конечно но задуманный алгоритм работает не так как нужно...можно вместо вопроса батнику вписать ответ и он ответит ответом на ответ как бы это странно не звучало...так вот...
батник(зачем он тут нужен не знаю но на остальных сайтах где я раньше спрашивал подобные вопросы просили батник и его предназначение):
p.s.Части батника:
Скрытый текст
start1 -логируемая рабочая часть
start2/21 -нелогируемая рабочая часть
Repeat -поиск ответа в логируемой рабочей части
Repeat1 -поиск ответа в нелогируемой рабочей части
ANF - ошибка о том что ответ не найден на логируемой рабочей части
ANF1 - ошибка о том что ответ не найден на нелогируемой рабочей части
Check1/2 - проверки на повтор и отсутсвие вопроса на логируемой части
Check3/4 - проверки на повтор и отсутсвие вопроса на нелогируемой части
Answer - установка ответа в переменную на логируемой части
Continue - вывод ответа на экран логируемой части
Answer1 - установка ответа в переменную на нелогируемой части
Continue1 - вывод ответа на экран нелогируемой части
Переменные
Атрибуты

Код:

@Echo Off
set Question=0
set Question1=0
Set Lines=0
For /F "usebackq" %%L In ("123.txt") Do (Set /A Lines+=1)
cls
setlocal enableextensions enabledelayedexpansion
goto start2
:start1
set LOG=BotLOG.log
echo Logging is ON
set /p "Question="
set /a "STR=0"
set /A "Nstrok=0"
set /a "NUM=0"
set /a "NUM2=!Lines!+1"
If "!Question!"=="0" (
        cls
        Echo I Cannot read emtpy messages!
        goto start1
        )
:Repeat
set PrevQuest=%Question%
set /a NUM+=1
set /a c=0
for /f "UseBackQ Delims=" %%A IN ("123.txt") do (
  set /a c+=1
  if !c!==%NUM% set "STR=%%A"
)
echo !NUM! !STR! !Lines! !NUM2! >>%LOG%
echo !STR! | >nul findstr.exe /C:!Question! && goto Answer
if "!NUM!"=="!NUM2!" (goto ANF) else goto Repeat
:ANF
cls
echo Answer Not Found
set /a "STR=0"
set /A "Nstrok=0"
set /a "NUM=0"
set /p "Question="
:Check1
if "!Question!"=="!PrevQuest!" (
        cls
        echo I have already answered this question!
        echo I have already answered this question! >>%LOG%
        set /p "Question="
        goto Check1
        ) else if "!Question!"=="DeBuG OFF" (goto start21) else If "!Question!"=="0" (
        cls
        Echo I Cannot read emtpy messages!
        set /p "Question="
        goto Check2
        ) else (
        set PrevQuest=%Question%
        goto Repeat
        )
:Answer
set /A "Nstrok=!NUM!"
Set "FileIn=123.txt"
Set "Delim=="

Set /A n=%Nstrok%-1
FOR /F "usebackq tokens=1,* delims=%Delim%" %%i IN (`MORE +%n% "%FileIn%"`) DO Set "Answer=%%j" &GoTo :Continue
:Continue
cls
Echo !Answer!
Echo !Answer! >>%LOG%
set /a "Question=0"
set /a "STR=0"
set /A "Nstrok=0"
set /a "NUM=0"
set /p "Question="
:Check2
if "!Question!"=="!PrevQuest!" (
        cls
        echo I have already answered this question!
        echo I have already answered this question! >>%LOG%
        set /p "Question="
        goto Check2
        ) else if "!Question!"=="DeBuG OFF" (goto start21) else If "!Question!"=="0" (
        cls
        Echo I Cannot read emtpy messages!
        set /p "Question="
        goto Check2
        ) else (
        set PrevQuest=%Question%
        goto Repeat
        )
endlocal
:start21
echo Logging is OFF
:start2
set /p "Question1="
set /a "STR1=0"
set /A "Nstrok1=0"
set /a "NUM1=0"
set /a "NUM21=!Lines!+1"
If "!Question1!"=="0" (
        cls
        Echo I Cannot read emtpy messages!
        goto start2
        )
:Repeat1
set PrevQuest1=%Question1%
set /a NUM1+=1
set /a c=0
for /f "UseBackQ Delims=" %%A IN ("123.txt") do (
  set /a c+=1
  if !c!==%NUM1% set "STR1=%%A"
)
echo !STR1! | >nul findstr.exe /C:!Question1! && goto Answer1
if "!NUM1!"=="!NUM21!" (goto ANF1) else goto Repeat1
:ANF1
cls
echo Answer Not Found
set /a "STR1=0"
set /A "Nstrok1=0"
set /a "NUM1=0"
set /p "Question1="
:Check3
if "!Question1!"=="!PrevQuest1!" (
        cls
        echo I have already answered this question!
        set /p "Question1="
        goto Check3
        ) else if "!Question1!"=="DeBuG ON" (goto start1) else If "!Question1!"=="0" (
        cls
        Echo I Cannot read emtpy messages!
        set /p "Question1="
        goto Check3
        ) else (
        set PrevQuest1=%Question1%
        goto Repeat1
        )
:Answer1
set /A "Nstrok1=!NUM1!"
Set "FileIn1=123.txt"
Set "Delim1=="

Set /A n=%Nstrok1%-1
FOR /F "usebackq tokens=1,* delims=%Delim1%" %%i IN (`MORE +%n% "%FileIn1%"`) DO Set "Answer1=%%j" &GoTo :Continue1
:Continue1
cls
Echo !Answer1!
set /a "Question1=0"
set /a "STR1=0"
set /A "Nstrok1=0"
set /a "NUM1=0"
set /p "Question1="
:Check4
if "!Question1!"=="!PrevQuest1!" (
        cls
        echo I have already answered this question!
        set /p "Question1="
        goto Check4
        ) else if "!Question1!"=="DeBuG ON" (goto start1) else If "!Question1!"=="0" (
        cls
        Echo I Cannot read emtpy messages!
        set /p "Question1="
        goto Check4
        ) else (
        set PrevQuest1=%Question1%
        goto Repeat1
        )
endlocal
PAUSE>nul

БД:
Скрытый текст
Привет=Приветики
Пока=Досвидания
Проверка=раз Два ТРИ Проверка ответа с пробелами

предназначение батника:попытка написать батник который "Отвечает" на заданные вопросы
думаю вопрос ясен и понятен...сделать скрипт проверяющий определенную строку(переменная NUM=номер строки или STR=сама строка) строку на наличие определенного текста(переменная Question/Question1) до знака =...надеюсь на вашу помощь...

alpap 10-09-2017 05:29 2763854

Darkar25,
погуглите: "Чат на cmd" и одной проблемой (или головной болью) у вас станет меньше.

megaloman 10-09-2017 11:44 2763888

Darkar25,
Не знаю, что Вы хотите, но вот вариант. Здесь "база" совмещена с батником, но может быть и прописана в отдельный файл. Запускайте, смотрите. Сохранить в 866 кодировке
Код:

@Echo Off
CLS

Set "FileIn=Z:\Box_In\list.txt"
Set "FileIn=%~dpnx0"
Set "Delim=="

Set "Answ=Скажи что-нибудь!"
:Begin

Set "Quest="
Set /P "Quest=%Answ%  >"

FOR /F "tokens=*" %%s IN ("%Quest%") DO Set "Quest=%%s"
If "%Quest%"=="" Set "Quest=#"

Set "Answ="
FOR /F "usebackq tokens=1,* delims=%Delim%" %%i IN (`FINDSTR /B /I /C:"%Quest%=" "%FileIn%" 2^>nul`) DO Set "Answ=%%j"

If "%Answ%"=="" Set "Answ=Я этого не знаю. Скажи что-то внятное."
GoTo :Begin


GoTo :Eof
#=Ничего не сказано. Скажи что-нибудь!
привет=Здравствуй, моя радость
до свидания=Буду скучать
Тест=Раз, два, три, четыре, пять! Вышел зайчик погулять!

Чтобы работало с отдельным файлом, прописать его в переменной, красное удалить, подчеркнутое перенести в отдельный файл с указанным выше именем.

Darkar25 13-09-2017 17:11 2764502

спасибо,megaloman,вы решили мне сразу 2 проблемы:Проблема 1:невозможность писать пробелы в вопросах
Проблема 2:при вписывании вопроса можно написать ответ и он ответит ответом на ответ...отмечаю решенными обе темы...


Время: 21:52.

Время: 21:52.
© OSzone.net 2001-