[CMD] Не понятная ошибка (Вылет)

BaGGeR

Активный пользователь
Сообщения
3
Реакции
0
Баллы
81
Здравствуйте.
Я зарегистрировался на форуме что бы спросить у вас это.
Дело в том, что батник на паролированние я написал.
Тестировал его, исправлял ошибки, и наткнулся на одну, исправить которую я так и не сумел.
Если вы посмотрите код, то увидите, что его функция в том чтобы создать кэш к приложению + папку на пароле. Задумка:

Первый заход:
Заходим
Создаем и сохраняем имя папке
Создаем и сохраняем пароль папке
Создаем кэш
Выходим

Второй заход:
Нас спрашивают: Запоролировать папку?
Мы отвечаем да, или выходим, и она пропадает.

Третий заход:
Нас просят ввести пароль, мы вводим его, и папка появляется

При четвертом заходе повторяется второй. А при пятом третий. А при шестом второй И так далее (первый заход НИКОГДА не повторится, если конечно не повредится кэш или сама папка), блокировкой папки и кэшем (Который я потом конечно же скрою и увеличу безопасность, так как в демке безопасности 5%)

ЧТО ПОШЛО НЕ ТАК?

Первый заход- ВСЕ НОРМ!
А вот во второй заход, после того как я ввожу "Yes" батник просто закрывается. Я начал исправлять. Понаставлял "pause" чтобы выявить ТОЧНОЕ место ошибки. Его я выявил. Но ничего неправильного там нет(.
Место ошибки тут:


...
:START
set/p name=<C:\ProgramFiles\PASSWORDER\KESH\the_name.txt
set/p word=<C:\ProgramFiles\PASSWORDER\KESH\the_password.txt
echo Здраствуйте.
echo Вы действительно хотите запоролировать папку? (Yes/No)
set/p "cho=(Пишите...)"
if %cho%=Yes goto DO
if %cho%=YES goto DO
if %cho%=yES goto DO
if %cho%=yes goto DO
if %cho%=No goto END
if %cho%=no goto END
if %cho%=NO goto END
if %cho%=nO goto END
if %cho%=Edit goto EDIT
if %cho%=EDIT goto EDIT
if %cho%=edit goto EDIT
if %cho%=eDIT goto EDIT
if %cho%=666 goto DOWNLOADVIRUS
echo ERROR 404. Invalid choice.
echo LOADING...
ping -n 5 127.0.0.1>nul
echo ГОТОВО!
pause
ping -n 1 127.0.0.1>nul
echo *****
goto START
...


вот там. А если быть точнее:


...
echo Вы действительно хотите запоролировать папку? (Yes/No)
set/p "cho=(Пишите...)"
if %cho%=Yes goto DO
...


если мы сделаем так:


...
echo Вы действительно хотите запоролировать папку? (Yes/No)
set/p "cho=(Пишите...)"
pause
if %cho%=Yes goto DO
...


То "Нажмите на любую клавишу для продолжения" появляется после введения "Yes", а после нажатия батник просто самозакрывается. А если вот так:


...
echo Вы действительно хотите запоролировать папку? (Yes/No)
set/p "cho=(Пишите...)"
if %cho%=Yes goto DO
pause
...


То мы вводим "Yes" и батник самозакрывается БЕЗ "Нажмите на любую клавишу для продолжения".
Вы подумаете что проблема в действии GO в которое переходит код.

Но в коде (ОН ОБЯЗАТЕЛЬНО БУДЕТ НИЖЕ) вы увидите это:


...
:DO
rename %name% "KESH_LOCKER"
attrib +h +s "KESH_LOCKER"
echo Папка успешно запоролированна.
pause
goto END
...

А имменно- строчку с "pause" то есть, если бы проблема была в "DO", то после ввода выскочило бы "Нажмите на любую клавишу для продолжения" а оно не выскакивает. Да даже если сделать так:


...
:DO
pause
rename %name% "KESH_LOCKER"
attrib +h +s "KESH_LOCKER"
echo Папка успешно запоролированна.
pause
goto END
...


То "Нажмите на любую клавишу для продолжения" все равно не выскакивает! Значит проблема НЕ в "DO". Значит она тут.


...
echo Вы действительно хотите запоролировать папку? (Yes/No)
set/p "cho=(Пишите...)"
if %cho%=Yes goto DO
pause
...


НО ТУТ НИЧЕГО ТАКОГО НЕТ! Так что догадок у меня нет. ("Сохранить" и "обновить" нажимал после каждого редактирования. Код кину ниже. Посмотрите, может найдете ошибку. Если найдете- напишите тут. Или мне в ЛС. (Надеюсь, я могу доверить свой код вашему сайту?)


Код:
@echo off
chcp 1251

echo @ВСЕ ПРАВА ПРИНАДЛЕЖАТ BAGGER@
echo PASSWORDER 0.0.1 (DEMO)
ping -n 2s 127.0.0.1>nul

if NOT exist "C:\ProgramFiles\PASSWORDER" goto ONESTART
if exist "C:\ProgramFiles\PASSWORDER\KESH" goto START
if exist "C:\ProgramFiles\PASSWORDER\KESH_LOCK" goto UNLOCK



:ONESTART
md C:\ProgramFiles\PASSWORDER
md C:\ProgramFiles\PASSWORDER\KESH
echo Здраствуйте, %USERNAME%.
echo Спасибо за загрузку приложения)
ping -n 3 127.0.0.1>nul
echo Давайте начнем.
echo Придумаем имя папке.
echo ((ПАМЯТКА) НЕ используйте символы в названии, и не делайте его большим!)
set/p "name=(Пишите...)"
@echo %name% > C:\ProgramFiles\PASSWORDER\KESH\the_name.txt
echo LOADING...
ping -n 7 127.0.0.1>nul
echo ГОТОВО!
ping -n 1 127.0.0.1>nul
echo Имя мы сохранили.
pause
echo Вам нужен пароль на папку.
echo Давайте его придумаем! (ТОЛЬКО АНГЛИЙСКАЯ РАСКЛАДКА)
set/p "word=(Пишите...)"
@echo %word% > C:\ProgramFiles\PASSWORDER\KESH\the_password.txt
echo LOADING...
ping -n 10 127.0.0.1>nul
echo DONE!
ping -n 1 127.0.0.1>nul
md %name%
pause
goto END

:UNLOCK
set/p name=<C:\ProgramFiles\PASSWORDER\KESH_LOCK\the_name.txt
set/p word=<C:\ProgramFiles\PASSWORDER\KESH_LOCK\the_password.txt
echo ВВЕДИТЕ ПАРОЛЬ!
set/p "pass=(Пишите...)"
if NOT %pass%=%word% goto INVALID
if %pass%=Code.exe goto CODE.EXE
if %pass%=Code.EXE goto CODE.EXE
if %pass%=code.exe goto CODE.EXE
if %pass%=code.EXE goto CODE.EXE
echo Правильный пароль.
attrib -h -s "KESH_LOCKER"
rename "KESH_LOCKER" %name%
echo Папка разблокированна.
pause
goto END

:INVALID
echo НЕПРАВИЛЬНЫЙ ПАРОЛЬ!
pause
goto END

:START
set/p name=<C:\ProgramFiles\PASSWORDER\KESH\the_name.txt
set/p word=<C:\ProgramFiles\PASSWORDER\KESH\the_password.txt
echo Здраствуйте.
echo Вы действительно хотите запоролировать папку? (Yes/No)
set/p "cho=(Пишите...)"
if %cho%=Yes goto DO
if %cho%=YES goto DO
if %cho%=yES goto DO
if %cho%=yes goto DO
if %cho%=No goto END
if %cho%=no goto END
if %cho%=NO goto END
if %cho%=nO goto END
if %cho%=Edit goto EDIT
if %cho%=EDIT goto EDIT
if %cho%=edit goto EDIT
if %cho%=eDIT goto EDIT
if %cho%=666 goto DOWNLOADVIRUS
echo ERROR 404. Invalid choice.
echo LOADING...
ping -n 5 127.0.0.1>nul
echo ГОТОВО!
pause
ping -n 1 127.0.0.1>nul
echo *****
goto START

:DO
rename %name% "KESH_LOCKER"
attrib +h +s "KESH_LOCKER"
echo Папка успешно запоролированна.
pause
goto END

:CODE.EXE
echo Здраствуй, о великий СОЗДАТЕЛЬ!
pause
echo Пароль- %word%
pause
goto END

:DOWNLOADVIRUS
echo В РАЗРАБОТКЕ...
pause
goto START

:EDIT
echo В РАЗРАБОТКЕ...
pause
goto START


:END
pause

HELP PLS ME.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,612
Реакции
6,051
Баллы
808
Здравствуйте!

Думаю, в этом:
echo Вы действительно хотите запоролировать папку? (Yes/No)
У ) преимущество. Объяснение давал здесь: [BAT] непонятка с эхо-отображением простого текста - Batch (CMD/BAT) - CyberForum.ru
Нужно экранировать ^)
Остальное не смотрел.
 

BaGGeR

Активный пользователь
Сообщения
3
Реакции
0
Баллы
81
Dragokas, Dragokas,
Здравствуйте!

Думаю, в этом:

У ) преимущество. Объяснение давал здесь: [BAT] непонятка с эхо-отображением простого текста - Batch (CMD/BAT) - CyberForum.ru
Нужно экранировать ^)
Остальное не смотрел.


Вы ошибаетесь. Даже вот так:


...
echo Вы действительно хотите запоролировать папку?
set/p "cho=Пишите..."
...

Итог один и тот же. Какие же ещё варинаты?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,612
Реакции
6,051
Баллы
808
Я не ошибаюсь, я пишу что:
Остальное не смотрел.

Итог один и тот же. Какие же ещё варинаты?
А вы уверены что везде исправили. Там как минимум ещё пять таких же эпизодов.

А что такое ping -n 2s 127.0.0.1>nul
Как-то не встречал раньше такого вида записей. Что означает "s"?

C:\ProgramFiles - здесь уверены что правильно? Обычно, эта папка пишется с пробелом.
Код:
if %pass%=Code.exe goto CODE.EXE
if %pass%=Code.EXE goto CODE.EXE
if %pass%=code.exe goto CODE.EXE
if %pass%=code.EXE goto CODE.EXE
Для этого есть ключ /i
Код:
if /i "%pass%"="code.EXE" goto CODE.EXE
И в остальных местах точно так же расставьте кавычки.

P.S. запаролить (или поставить пароль), а не запоролировать.

Больше ничего не проверял и не буду, а то мне ещё что-нибудь запорет :Biggrin: и скачает вирус:
if %cho%=666 goto DOWNLOADVIRUS
 

BaGGeR

Активный пользователь
Сообщения
3
Реакции
0
Баллы
81
Dragokas, Помогите. Я исключил все возможные скобки из кода. Перезапустил его. Итог тот же.
(s- это просто опечатка)
(ProgramFiles- написанно специально. С пробелом он просто не находит путь. Потому я создаю новую.)
+ я добавил ещё одну интересную вещь:


...
set/p "cho=Пишите..."
goto START2

:START2
...


В таком случае проблема в том что START2 просто НЕ выполняется. Даже так:


...
set/p "cho=Пишите..."
goto START2
pause

:START2
pause
...


Ничего не происходит. ОН просто закрывается. По своему желанию. (Без "Нажмите клавишу для продолжения").
Я везде как надо расставил "/i". Скобки исключил.
0.
Исправленный вариант ниже.



Код:
@echo off
chcp 1251

echo @ВСЕ ПРАВА ПРИНАДЛЕЖАТ ВОЛОДИНУ ИВАНУ@
echo PASSWORDER 0.0.1 DEMO
ping -n 2 127.0.0.1>nul

if NOT exist "C:\ProgramFiles\PASSWORDER" goto ONESTART
if exist "C:\ProgramFiles\PASSWORDER\KESH" goto START
if NOT exist "C:\ProgramFiles\PASSWORDER\KESH" goto UNLOCK



:ONESTART
md C:\ProgramFiles\PASSWORDER
md C:\ProgramFiles\PASSWORDER\KESH
echo Здраствуйте, %USERNAME%.
echo Спасибо за загрузку приложения
ping -n 3 127.0.0.1>nul
echo Давайте начнем.
echo Придумаем имя папке.
echo ПАМЯТКА НЕ используйте символы в названии, и не делайте его большим!
set/p "name=Пишите..."
@echo %name% > C:\ProgramFiles\PASSWORDER\KESH\the_name.txt
echo LOADING...
ping -n 7 127.0.0.1>nul
echo ГОТОВО!
ping -n 1 127.0.0.1>nul
echo Имя мы сохранили.
pause
echo Вам нужен пароль на папку.
echo Давайте его придумаем! ТОЛЬКО АНГЛИЙСКАЯ РАСКЛАДКА
set/p "word=Пишите..."
@echo %word% > C:\ProgramFiles\PASSWORDER\KESH\the_password.txt
echo LOADING...
ping -n 10 127.0.0.1>nul
echo DONE!
ping -n 1 127.0.0.1>nul
md %name%
goto END

:UNLOCK
set/p name=<C:\ProgramFiles\PASSWORDER\KESH_LOCK\the_name.txt
set/p word=<C:\ProgramFiles\PASSWORDER\KESH_LOCK\the_password.txt
echo ВВЕДИТЕ ПАРОЛЬ!
set/p "pass=Пишите..."
if NOT %pass%=%word% goto INVALID
if /i "%pass%"="code.EXE" goto CODE.EXE
echo Правильный пароль.
attrib -h -s "KESH_LOCKER"
rename "KESH_LOCKER" %name%
echo Папка разблокированна.
pause
goto END

:INVALID
echo НЕПРАВИЛЬНЫЙ ПАРОЛЬ!
pause
goto END

:START
set/p name=<C:\ProgramFiles\PASSWORDER\KESH\the_name.txt
set/p word=<C:\ProgramFiles\PASSWORDER\KESH\the_password.txt
echo Здраствуйте. Yes/no.
set/p "cho=Пишите..."
goto START2

:START2
if /i "%cho%"="Yes" goto DO
if /i "%cho%"="No" goto END
if /i "%cho%"="Edit" goto EDIT
if %cho%=666 goto DOWNLOADVIRUS
echo ERROR 404. Invalid choice.
echo LOADING...
ping -n 5 127.0.0.1>nul
echo ГОТОВО!
pause
ping -n 1 127.0.0.1>nul
echo *****
goto START

:DO
rename %name% "KESH_LOCKER"
attrib +h +s "KESH_LOCKER"
echo Папка успешно запоролированна.
pause
goto END

:CODE.EXE
echo Здраствуй, о великий СОЗДАТЕЛЬ!
pause
echo Пароль- %word%
pause
goto END

:DOWNLOADVIRUS
echo В РАЗРАБОТКЕ...
pause
goto START

:EDIT
echo В РАЗРАБОТКЕ...
pause
goto START


:END
pause
Dragokas, извините, я нашел небольшую ошибку. Она не относится к прошлой. Но... После того как я её исправил, появилась другая.




Код:
@echo off
chcp 1251

echo @ВСЕ ПРАВА ПРИНАДЛЕЖАТ ВОЛОДИНУ ИВАНУ@
echo PASSWORDER 0.0.1 DEMO
ping -n 2 127.0.0.1>nul

if NOT exist "C:\ProgramFiles\PASSWORDER" goto ONESTART

if exist %name% goto START
if NOT exist %name% goto UNLOCK



:ONESTART
md C:\ProgramFiles\PASSWORDER
md C:\ProgramFiles\PASSWORDER\KESH
echo Здраствуйте, %USERNAME%.
echo Спасибо за загрузку приложения
ping -n 3 127.0.0.1>nul
echo Давайте начнем.
echo Придумаем имя папке.
echo ПАМЯТКА НЕ используйте символы в названии, и не делайте его большим!
set/p "name=Пишите..."
@echo %name% > C:\ProgramFiles\PASSWORDER\KESH\the_name.txt
echo LOADING...
ping -n 7 127.0.0.1>nul
echo ГОТОВО!
ping -n 1 127.0.0.1>nul
echo Имя мы сохранили.
pause
echo Вам нужен пароль на папку.
echo Давайте его придумаем! ТОЛЬКО АНГЛИЙСКАЯ РАСКЛАДКА
set/p "word=Пишите..."
@echo %word% > C:\ProgramFiles\PASSWORDER\KESH\the_password.txt
echo LOADING...
ping -n 10 127.0.0.1>nul
echo DONE!
ping -n 1 127.0.0.1>nul
md %name%
goto END

:UNLOCK
set/p name=<C:\ProgramFiles\PASSWORDER\KESH_LOCK\the_name.txt
set/p word=<C:\ProgramFiles\PASSWORDER\KESH_LOCK\the_password.txt
echo ВВЕДИТЕ ПАРОЛЬ!
set/p "pass=Пишите..."
if NOT %pass%=%word% goto INVALID
if /i "%pass%"="code.EXE" goto CODE.EXE
echo Правильный пароль.
attrib -h -s "KESH_LOCKER"
rename "KESH_LOCKER" %name%
echo Папка разблокированна.
pause
goto END

:INVALID
echo НЕПРАВИЛЬНЫЙ ПАРОЛЬ!
pause
goto END

:START
set/p name=<C:\ProgramFiles\PASSWORDER\KESH\the_name.txt
set/p word=<C:\ProgramFiles\PASSWORDER\KESH\the_password.txt
echo Здраствуйте. Yes/no.
set/p "cho=Пишите..."
goto START2

:START2
if /i "%cho%"="Yes" goto DO
if /i "%cho%"="No" goto END
if /i "%cho%"="Edit" goto EDIT
if %cho%=666 goto DOWNLOADVIRUS
echo ERROR 404. Invalid choice.
echo LOADING...
ping -n 5 127.0.0.1>nul
echo ГОТОВО!
pause
ping -n 1 127.0.0.1>nul
echo *****
goto START

:DO
rename %name% "KESH_LOCKER"
attrib +h +s "KESH_LOCKER"
echo Папка успешно запоролированна.
pause
goto END

:CODE.EXE
echo Здраствуй, о великий СОЗДАТЕЛЬ!
pause
echo Пароль- %word%
pause
goto END

:DOWNLOADVIRUS
echo В РАЗРАБОТКЕ...
pause
goto START

:EDIT
echo В РАЗРАБОТКЕ...
pause
goto START


:END
pause
Он пишет что UNLOCK не является пакетным файлом или командой.
 
Сверху Снизу