Batch file 批次';如果';命令不起作用

Batch file 批次';如果';命令不起作用,batch-file,Batch File,这段代码只需跳过“if”并转到另一个 我不想看到这样的人: “2 2端”或“3 3端”,但仅显示“3 1端”或“2 1端”。请帮助我这方面的新手 @echo off set /p number= if %number%=="1" goto 1 if %number%=="2" goto 2 if %number%=="3" goto 3 :1 echo 1 goto end :2 echo 2 goto end :3 echo 3 goto end :end echo end pause 批

这段代码只需跳过“if”并转到另一个 我不想看到这样的人: “2 2端”或“3 3端”,但仅显示“3 1端”或“2 1端”。请帮助我这方面的新手

@echo off
set /p number=
if %number%=="1" goto 1
if %number%=="2" goto 2
if %number%=="3" goto 3
:1
echo 1
goto end
:2
echo 2
goto end 
:3
echo 3
goto end
:end
echo end
pause

批处理中的
IF
命令纯粹是字符串比较,而不是数字比较。此外,引号很重要。您的代码包含以下行:

if %number%=="1" goto 1
它将变量
number
的值与字符串
“1”
进行比较。但是,您的
SET
语句隐式地希望您键入
1
2
3
,不带引号

为了避免在用户提供空白或空字符串作为对
SET
提示的响应时出现语法错误,您需要引用
%number%

if "%number%"=="1" goto 1
此外,您希望在标签
:1
之前放置一个无条件的goto,以保护该子例程;如果不输入,则如果用户未输入
1
2
3
,则会由于故障而执行选项1

也有可能-我自己不太清楚它是如何工作的-您可能想要使用延迟扩展,这将要求您更改
,如果
s使用
而不是
%

if "!number!"=="1" goto 1

有一个非常好的参考网站批量在;您可能需要特别注意。

批处理中的
IF
命令纯粹是字符串比较,而不是数字比较。此外,引号很重要。您的代码包含以下行:

if %number%=="1" goto 1
它将变量
number
的值与字符串
“1”
进行比较。但是,您的
SET
语句隐式地希望您键入
1
2
3
,不带引号

为了避免在用户提供空白或空字符串作为对
SET
提示的响应时出现语法错误,您需要引用
%number%

if "%number%"=="1" goto 1
此外,您希望在标签
:1
之前放置一个无条件的goto,以保护该子例程;如果不输入,则如果用户未输入
1
2
3
,则会由于故障而执行选项1

也有可能-我自己不太清楚它是如何工作的-您可能想要使用延迟扩展,这将要求您更改
,如果
s使用
而不是
%

if "!number!"=="1" goto 1

有一个非常好的参考网站批量在;您可能需要特别注意和。

删除引号或用引号括起变量。(如果
比较是文字和精确的,
)删除引号或用引号括起变量。(如果
比较是文字和精确的,
if。)