批处理'IF'命令不起作用

时间:2017-12-04 18:46:55

标签: batch-file

此代码只是跳过“如果”推荐并转到另一个 我不会看到这样的想法: “2 2 end”或“3 3 end”,但它仅显示“3 1 end”或“2 1 end”。请帮助我新的。

@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

1 个答案:

答案 0 :(得分:2)

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

等行
if %number%=="1" goto 1

将变量number的值与字符串"1"进行比较。但是,您的SET语句隐含地要求您输入123,不带引号。

为了避免语法错误,如果用户提供空字符串或空字符串作为对SET提示的响应,则要引用%number%

if "%number%"=="1" goto 1

此外,您希望在标签:1之前添加无条件goto以保护该子例程;如果您不这样做,那么如果用户未输入123,则会因为失败而执行选项1。

也有可能 - 我不太清楚自己的工作原理 - 您可能希望使用延迟扩展,这需要您更改IF以使用!代替%

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

SS64有一个非常好的批量参考网站;您可能需要特别注意Delayed ExpansionIF command