我正在尝试为最终用户制作一个可能输入的表格,但其中一个输入导致程序崩溃,因为有一个空格。我知道通常用“ ”括住输入是正确的做法,但在这种情况下它不起作用,以下是代码:
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
语句就会将字符串视为单个项目而不是几个单独的字符串。
来源如果- 有条件地执行命令。
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 如果- 有条件地执行命令。
答案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 ...