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

时间:2016-12-08 04:15:03

标签: batch-file

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

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

如果if为false,我希望它继续运行,如果是true,我希望它继续运行。

2 个答案:

答案 0 :(得分:3)

两行代码 - 四个问题

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' - 引号是被比较的字符串的一部分。将它们放在两侧或从两侧省略它们。 Batch仅使用字符串 - set /a语法理解并控制从字符串更改为数字表示所需的转换操作(仅限整数),if将尝试将参数转换为数字以进行比较 - 失败时任何一方,if都会恢复为字符串比较。

最后,如果比较已经评估为if,那么您还没有向true提供任何操作 - 这是对if结构的另一种违反。

答案 1 :(得分:0)

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

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