Darkar25
09-09-2017, 23:35
некоторые из вас уже знают что я на этом форуме задавал вопрос как выводить текст на экран после определенного символа...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) до знака =...надеюсь на вашу помощь...
батник(зачем он тут нужен не знаю но на остальных сайтах где я раньше спрашивал подобные вопросы просили батник и его предназначение):
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) до знака =...надеюсь на вашу помощь...