为什么我的 if 函数关闭我的批处理文件?



每当我激活此代码时,它都会立即关闭控制台。

set RAND=%RANDOM% %%100
if %RAND% gtr '25' 

如果 if 为假,我希望它继续运行,如果为真,则转到其他位置。

两行代码 - 四个问题

set RAND=%RANDOM% %%100
if %RAND% gtr '25' 

首先,要将变量设置为计算结果,您需要set /a。就目前而言,rand将被设置为12345 %100- 一个字符串(一个%,因为%转义%

然后,您的第二行将被调用为

if 12345 %100 gtr '25' 

这违反了if语法 -%100会混淆它,因为它期望在该位置有一个比较运算符(==,equ,neq,gtr,lss,leq,geq),因此它将生成错误消息并停止。如果您使用点运行,单击并咯咯笑,然后窗口将立即关闭。调试时需要从命令提示符运行批处理程序。

下一个问题是25永远不会等于'25'- 引号是要比较的字符串的一部分。 将它们放在两侧或从两侧省略它们。批处理仅使用字符串 -set /a语法理解并控制从字符串更改为数字表示形式(仅限整数)所需的转换操作,if将尝试将参数转换为数字进行比较 - 在任何一方失败时,if恢复为字符串比较。

最后,如果比较评估为true,您没有向if提供任何操作 - 这是对if结构的又一次违反。

在文件末尾暂停...暂停不允许关闭批处理文件,除非您按下某个键(如空格键)。

@echo off
cls
echo This is just an example
pause
exit

最新更新