Проблемы со входами без пробелов в пакетном файле - PullRequest
0 голосов
/ 20 ноября 2018

У меня проблема с успешным вводом, но я не могу использовать команду IF с этим вводом.Я уже пробовал:

if "%input%" equ "s helpme" goto localhost.mail.helpme

Я исключил возможность ошибки в :debug function, ошибку в символе '.' и возможность ошибки в секции ввода set /p,У меня нет идей о том, как работает код.

Я знаю, как решить общую проблему пробелов в пакетном режиме, но по какой-то причине этот код все еще не работает для меня.Вот код и выходные данные из файла отладки:

:: GAME.BAT

set lvl=003
set debug=true

:localhost.mail
call :debug "vdir localhost.mail"
if %lvl% equ 002 goto localhost.mail.help
set /p input=localhost.mail 
call :debug "localhost.mail input %input%"
if %input% equ h goto localhost.mail.help
if %input% equ help goto localhost.mail.help
if %input% equ listmail goto localhost.mail.list
if %input% equ l goto localhost.mail.list
if "%input%" equ "s helpme" goto localhost.mail.helpme
if "%input%" equ "show helpme" goto localhost.mail.helpme
if %input% equ e goto localhost
if %input% equ exit goto localhost

:localhost.mail.help
call :debug "vdir localhost.mail.help"
if %lvl% equ 002 echo Advanced to level 3
if %lvl% equ 002 set lvl=003
echo (h)elp - Display this help screen
echo (l)istmail - Lists emails
echo (s)how - Shows an email ex. show helpme
echo (e)xit - Exits email
goto localhost.mail

:localhost.mail.list
call :debug "vdir localhost.mail.list"
if %lvl% gtr 002 echo helpme
goto localhost.mail

:localhost.mail.helpme
call :debug "vdir localhost.mail.helpme"
if %lvl% lss 003 goto localhost.mail
echo WORK IN PROGRESS, COME BACK NEXT UPDATE!
echo.
goto localhost.mail

:debug
if %debug% equ true echo %date% %time% %~1>>debug.txt
GOTO :EOF

:: DEBUG.TXT
Tue 11/20/2018 13:33:05.84 vdir localhost.mail
Tue 11/20/2018 13:33:05.86 vdir localhost.mail.help
Tue 11/20/2018 13:33:05.87 vdir localhost.mail
Tue 11/20/2018 13:33:10.15 localhost.mail input s helpme

В конце DEBUG.TXT это то место, где окно пакета вышло из ошибки кодирования.

1 Ответ

0 голосов
/ 21 ноября 2018
:: GAME.BAT
set "lvl=3"
set "debug=true"

:localhost.mail
call :debug "vdir localhost.mail"
if %lvl% equ 2 goto localhost.mail.help
set /p "input=localhost.mail: "
call :debug "localhost.mail input %input%"
if /i "%input%" == "h" goto localhost.mail.help
if /i "%input%" == "help" goto localhost.mail.help
if /i "%input%" == "l" goto localhost.mail.list
if /i "%input%" == "listmail" goto localhost.mail.list
if /i "%input%" == "s" goto localhost.mail.helpme
if /i "%input%" == "show helpme" goto localhost.mail.helpme
if /i "%input%" == "e" goto :eof
if /i "%input%" == "exit" goto :eof
goto localhost.mail

:localhost.mail.help
call :debug "vdir localhost.mail.help"
if %lvl% equ 2 echo Advanced to level 3
if %lvl% equ 2 set "lvl=3"
echo (h)elp - Display this help screen
echo (l)istmail - Lists emails
echo (s)how - Shows an email ex. show helpme
echo (e)xit - Exits email
goto localhost.mail

:localhost.mail.list
call :debug "vdir localhost.mail.list"
if %lvl% gtr 2 echo helpme
goto localhost.mail

:localhost.mail.helpme
call :debug "vdir localhost.mail.helpme"
if %lvl% lss 3 goto localhost.mail
echo WORK IN PROGRESS, COME BACK NEXT UPDATE!
echo.
goto localhost.mail

:debug
if /i "%debug%" == "true" >> debug.txt echo %date% %time% %~1
goto :eof

Незначительные исправления, упомянутые ниже:

Сравнение строк в двойных кавычках, используемое с if.Использовал аргумент /i, чтобы сделать сравнение без учета регистра.Сравнение строк обрабатывается с помощью ==.

. Замененные числа заменяются десятичными эквивалентами, т.е. 003 - 3.Ведущие 0 s можно интерпретировать как восьмеричные числа.

Аргумент команды set, заключенный в двойные кавычки, чтобы избежать возможных пробелов в конце.

Выбор exit теперь идет в конец файла (goto :eof).

Включено s до Показать helpme .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...