Принять "как ввод от пользователя в файле .BAT? - PullRequest
0 голосов
/ 03 января 2019

Как заставить код попросить пользователя ввести cd "folder one", а затем принять его, как только он правильно введет тест, и перейти к метке :2.

@echo off

:BEGIN
echo cd "folder one" = navigates user to folder 1.
set /p input=Insert Word:
if /i "%input%"=="cd "folder on""  goto 2
if /i not "%input%"=="cd "folder one"" & goto BEGIN
echo.

:2
echo you did it!
timeout /t 05
exit

Ответы [ 2 ]

0 голосов
/ 04 января 2019
@echo off
setlocal enabledelayedexpansion

:BEGIN
echo cd "folder one" = navigates user to folder 1.
set "item1=cd "folder one""
set /p "input=Insert Word: "
if /i "!input!" == "!item1!" (goto 2) else goto BEGIN

:2
echo you did it^^!
timeout /t 05
exit /b

Задержка раскрытия переменных может помочь в этих случаях, как предварительно расширенные переменные расширяются буквально в Источник до исполнения. Задержка расширения хранит значение в памяти и сравнивает значение непосредственно при исполнении.

Чтобы обеспечить правильное сравнение, обе стороны могут нуждаться в задержке расширение, чтобы избежать специальных символов, таких как двойные кавычки. Обе стороны могут не нуждаться во внешних двойных кавычках, поскольку это не страдать от буквальных ошибок синтаксиса предварительно расширенного переменные. Я решил добавить внешние двойные кавычки.

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

Просмотр setlocal /? об использовании enabledelayedexpansion и disabledelayedexpansion.

0 голосов
/ 03 января 2019

только что нашел;вам нужно избегать внутренних двойных кавычек.Вы можете попробовать:

@echo off
setlocal EnableDelayedExpansion

:BEGIN
echo cd "folder one" = navigates user to folder 1.
set /p input=Insert Word: 
set input1=cd "folder one"
if /I !input! == !input1! (goto 2) else (goto BEGIN)
echo.

:2
echo you did it^^!
timeout /t 5
exit

Использование здесь DelayedExpansion из-за символа знака процента, который приводит к неправильному чтению двойных кавычек.

...