由于输入字符串中有空格,批处理文件出现错误

由于输入字符串中有空格,批处理文件出现错误

我正在尝试为最终用户制作一个可能输入的表格,但其中一个输入导致程序崩溃,因为有一个空格。我知道通常用“ ”括住输入是正确的做法,但在这种情况下它不起作用,以下是代码:

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**

以下行:

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

拒绝转到下面部分,无论是否{New User}被“ ”括起来。

:NewUser
    SET /P USERNAME=Please enter your desired username:
    SET /P PASSWORD=Please enter your desired password:

答案1

我知道通常用“ ”括住输入是正确的做法

但在这种情况下它不起作用

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

%ANSWER%New User包含Space并且被命令视为两个单独的字符串时if


解决方案

将表达式括if"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)

分隔符

如果命令比较的字符串IF包含诸如Space或 之类的分隔符Comma,则必须使用插入符号对分隔符进行转义^,或者必须将整个字符串“括起来”。

这样,IF语句就会将字符串视为单个项目而不是几个单独的字符串。

来源如果- 有条件地执行命令。


进一步阅读

答案2

我有一个批处理脚本,用于检查输入的参数是否为空白。

IF "%3"=="" (SET "NumberToStartWith=1")

当输入类似于 的内容时" after",单词前有空格,我会收到如下错误:

after""=="" was unexpected at this time.

通过添加字符来更改我的代码~以从输入中删除任何引号,从而修复了错误:

IF "%~3"=="" (SET "NumberToStartWith=1")

这个帖子了解有关~角色功能及其使用方法的更多信息。

答案3

为了检查并拒绝输入中的空白或空格,我使用技巧将空格更改为 - 然后检查...

@echo off
echo Check if input = blank or space
:MYSTART
REM cls
set input=-
set /p  input= Your input: 
set input=%input%-
REM replace space with -
set input=%input: =-%
REM  check if space
IF [%input%] EQU [--] cls & echo ********* input not OK & GOTO MYSTART
REM  check if blank (enter)
IF [%input%] EQU [-]  GOTO MYSTART
ECHO go haed ...

相关内容