2016-08-26 1 views
-1

, поэтому я создаю тестовую программу для пароля, и моя проблема возникает каждый раз, когда я пытаюсь использовать функцию создания нового пароля, она вызывает сбой CMD в данный момент я своего рода новым для пакетного программирования очень жаль, если я над/под codded введите код здеськаждый раз, когда я пытаюсь использовать одну из моих функций (if/else), она сбрасывает cmd - Batch

здесь основной код, который разваливается CMD

:create 
cls 
if exist C:\Users\%Username%\Documents\Password.txt (
goto password1 
) else (
set /p Password=What would you like your new password to be. 
echo %Password% > C:\Users\%Username%\Documents\Password.txt 
echo your new password is %Password% 
pause 
goto start 
) 
:password1 
set /p Password1= A password has already been created to change it please type   the last known password 
for /f "Delims=" %%a in (C:\Users\%Username%\Documents\Password.txt) do (
set Text=%%a) 
if %Password1%==%Text% goto correct 
echo Incorrect! 
pause 
goto start 
:correct 
set /p password2=Correct! What would you like your new password to be. 
echo %password2% > C:\Users\%Username%\Documents\Password.txt 
echo Your new password is %password2% 
pause 
goto start 

здесь весь код

setlocal enabledelayedexpansion 
@echo off 
:start 
color a 
echo Welcome to the password program with this program you can securely store personal data, 
echo your options for this program are 
echo. 
echo Create - (Create a new password) 
echo. 
echo Check - (Check if your password is right) 
echo. 
echo Enter - (Enter to check your personal data) 
echo. 
set /p Program=What would you like to do. 
goto !Program! 

:create 
cls 
if exist C:\Users\!Username!\Documents\Password.txt ( 
goto password1 
) else(
set /p Password=What would you like your new password to be. 
echo !Password! > C:\Users\!Username!\Documents\Password.txt 
echo your new password is !Password! 
pause 
goto start 
) 
:password1 
set /p Password1= A password has already been created to change it please type  the last known password 
for /f "Delims=" %%a in (C:\Users\!Username!\Documents\Password.txt) do (
set Text=%%a) 
if !Password1!==!Text! goto correct 
echo Incorrect! 
pause 
goto start 

:correct 
set /p password2=Correct! What would you like your new password to be. 
echo !password2! > C:\Users\!Username!\Documents\Password.txt 
echo Your new password is !password2! 
pause 
goto start 

REM Not using this at the moment 
:check 
cls 

REM Not using this at the moment 
:enter 
cls 

извините, если этот вопрос уже был дан до того, как я только новичок в пакетном кодировании

+1

Это «сбой cmd»? Что именно происходит? Вы получаете сообщения об ошибках? – JJJ

+0

Прочтите эту тему справки: [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) – aschipfl

ответ

1

Проблема, с которой вы сталкиваетесь, связана с расширением переменной в пакетных сценариях.

С вашего кода, например.

(
set /p Password=What would you like your new password to be. 
echo %Password% > C:\Users\%Username%\Documents\Password.txt 
echo your new password is %Password% 
pause 
goto start 
) 

находится в блоке,% Пароль% сохраняет значение, имевшееся перед блоком (то есть пустым, при первом запуске).

Используйте задержанное расширение, чтобы обойти это (см. Предыдущую ссылку).

+0

Извините, но я не знаю, где положить setlocal enabledelayedexpansion SET VAR = Hello FOR/L %% а в (1,1,2) сделать ( эхо! вар! SET VAR = прощай ) или что ввести в него еще раз извините – Fireflame

+0

то пример кода. Вы помещаете setlocal enabledelayedexpansion в первую строку своей программы, а затем используете! вместо% вокруг ваших переменных. – ths

+0

, поэтому я изменил значение% на!, Но он по-прежнему падает, когда я набираю «create» P.S. Я изменю приведенный выше код, чтобы вы могли видеть, что я положил – Fireflame