2013-12-10 5 views
0

Я программировал командный файл, чтобы имитировать какую-то игру, но она всегда сбой (или просто закрытие) при вводе и отправке Пространства или просто ничего. Как я могу это исправить? Пример:Пакетные файлы всегда сбой при вводе пробела

set /p option=Option: 

Тогда я бы:

Option: 

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

=== РЕДАКТИРОВАТЬ ===

Полный код здесь:

@echo off 
cd Desktop 
md TestFolder 
goto main 

:main 
cls 
title Test 
echo. 
echo Enter your name below 
echo. 
set /p name=Name: 
if %name% == %name% set name=%name% & goto finish 

:finish 
echo. 
echo Thank you for entering your name. 
echo Press any key to close the window. 
pause >nul 
exit 

Проблема будет заключаться в «установить/имя р =», как когда партия предложит ввести свое имя (" Имя: «часть»), если вы нажмете Enter без ввода, он закроется.

+1

Как мы должны помочь?Вы показываете одну строку кода, которая никогда не будет разбита. Было бы полезно увидеть код, который не работает – jeb

+0

Да, это код, фактически, каждый код, похожий на этот, будет аварийно завершен. – MegaRodeon

ответ

1

Возможно, это то, что вам нужно.

Линия IF NOT DEFINED name GOTO main проверяет, не набрал ли пользователь клавишу Enter, не набрав ничего, и если это правда, то вернется на метку :main и предложит пользователю снова ввести имя.

Линия IF "%name%"==" " GOTO main проверяет, только что введенный пользователь 1 space, и если да, то вернется на метку :main, чтобы снова запросить пользователя.

:main 
cls 
title Test 
echo. 
echo Enter your name below 
echo. 
set /p name=Name: 
IF NOT DEFINED name GOTO main 
IF "%name%"==" " GOTO main 

:finish 
echo. 
echo Thank you for entering your name. 
echo Press any key to close the window. 
pause >nul 
exit 
+0

Спасибо, он отлично работал, и теперь пакет никогда не закрывается, спасибо! – MegaRodeon

2

Вы нам почти ничего не дали, но я сделаю обоснованное предположение. Если вы запускаете файл, дважды щелкнув файл (или ярлык), с рабочего стола или из проводника Windows, ваша консоль автоматически закрывается, когда программа достигает конечной точки. Конечная точка может быть вызвана вашей логикой кода, или это может быть связано с фатальной синтаксической ошибкой. Он закроется, прежде чем у вас будет возможность прочитать все напечатанные сообщения.

Решение заключается в изменении способа запуска игры, особенно во время разработки. Запустите консоль напрямую, выбрав Пуск-> Все программы-> Стандартные и выберите cmd.exe. Используйте CD, чтобы перейти к папке, в которой находится ваша игра, а затем введите имя командного файла для ее запуска. Теперь консоль останется открытой, когда игра закончится, и вы сможете видеть все сообщения и отлаживать намного проще.

+0

Извините. Я добавил полный код, см. Мой пост :) – MegaRodeon

3

Это линия, которая делает проблемы:

if %name% == %name% set name=%name% & goto finish 

Если вы просто нажать кнопку ввода в set /p name=Name:,% имя% будет пустым. Таким образом, линия выше будет выполняться как:

if == set name= & goto finish 

Конечно, это никогда не будет работать Чтобы сделать синтаксис правильно, используйте:

if "%name%" == "%name%" set name=%name% & goto finish 

Хорошо, это было Синтаксически часть. но что вы пытаетесь сделать? Если a равно a, тогда сделайте a = a ??

+0

Если a равно a, тогда сделайте a = a ?? Да, вы никогда не можете быть уверены. Поскольку #define b возможно в C++, вы хотите дважды проверить, что :-) –

+0

Обратите внимание, что 'space' перед' & 'будет включаться в переменную' name'. Один из способов устранить это - использовать кавычки, как в 'set 'name =% name%", или поместить значение & непосредственно после переменной, как в 'set name =% name% &' – foxidrive

+0

Спасибо всем за ответы, Я хотел бы отметить это как мой ответ тоже, но, к сожалению, нам остается только отметить его. Затем я проголосую за ваш ответ, потому что тот, который я обозначил как «Ответ», ответил, что я в основном хотел сделать. Спасибо вам всем! – MegaRodeon

Смежные вопросы