Это потому, что чек
if %password%!==!password
никогда не может быть правдой. if
сравнивает две строки с каждой стороны ==
. Спросите себя, может ли это условие быть когда-либо истинным; -)
Вы, вероятно, хотите
if %password%==password goto map
goto start
вместо этого. goto map
пропускает следующую строку, поэтому она не будет выполнена, и если условие было ложным, оно вернется к start
.
Другой вариант -
if %password%==password (goto map) else (goto start)
, что, вероятно, более знакомо программистам, привыкшим к структурированному программированию.
Одно предостережение: обычно вы должны заключать в кавычки проверяемые строки для защиты от пробелов во входных данных:
if "%password%"=="password" ...