Erro no arquivo em lote devido ao espaço na cadeia de entrada

2

Estou tentando fazer uma tabela de possíveis entradas para o usuário final, mas uma das entradas está causando a falha do programa, pois há um espaço. Eu sei que geralmente colocando a entrada com "" é a coisa correta a fazer, mas não funciona neste caso, aqui está o código:

SET /P ANSWER=%ANSWER%
if /i {%ANSWER%}=={help} (goto :FunctionList)
if /i {%ANSWER%}=={?} (goto :FunctionList)
if /i {%ANSWER%}=={clear} (goto :clear)
if /i {%ANSWER%}=={yes} (goto :yes)
if /i {%ANSWER%}=={tutorial} (goto :tutorial)
if /i {%ANSWER%}=={New User} (goto :NewUser) **--Offending line**

A linha:

if /i {%ANSWER%}=={New User} (goto :NewUser)

recusa-se a ir para a parte seguinte, independentemente de o {New User} ser incluído por "" ou não.

:NewUser
    SET /P USERNAME=Please enter your desired username:
    SET /P PASSWORD=Please enter your desired password:
    
por noxi 16.08.2015 / 14:37

1 resposta

1

Eu sei que geralmente colocar a entrada com "" é a coisa correta a se fazer

but it does not work in this case

if /i {%ANSWER%}=={help} (goto :FunctionList)

Quando %ANSWER% é New User , ele contém Space e é tratado como duas sequências separadas pelo comando if .

Solução

Coloque as expressões if em " s:

if /i "%ANSWER%"=="help" (goto :FunctionList)
if /i "%ANSWER%"=="?" (goto :FunctionList)
if /i "%ANSWER%"=="clear" (goto :clear)
if /i "%ANSWER%"=="yes" (goto :yes)
if /i "%ANSWER%"=="tutorial" (goto :tutorial)
if /i "%ANSWER%"=="New User" (goto :NewUser)

Delimitadores

Se a string que está sendo comparada por um comando IF inclui delimitadores como Space ou Comma , então os delimitadores devem ter um caret ^ ou a string inteira deve ser "citada". / p>

This is so that the IF statement will treat the string as a single item and not as several separate strings.

Fonte if - Condicionalmente execute um comando.

Leitura Adicional

por 16.08.2015 / 15:22