小编fee*_*n99的帖子

在DOS批处理不工作中比较2个数字

我是一个老前辈,是DOS Batch编程的新手.我认为这是一个非常简单的批处理脚本,但是没有用.我寻找类似的帖子,但找不到匹配的帖子.

我在XP上运行以下脚本.我的目标是在继续进行之前检查可用磁盘空间,但是我遇到了比较2个数字的问题,所以下面的脚本只包含那个逻辑.我有硬编码的数字来显示问题,这是...比较(如果x gtr y)似乎不起作用,因此分支逻辑转到了错误的位置.不管怎样,或者我在IF声明的其他地方弄乱了.(有些echo语句是不必要的 - 它们用于调试 - 但我暂时将它们保留下来.)

任何对我出错的启示都会非常感激.

谢谢...

@echo off

set Free=217522712576
set Need=20000000000

echo Free=%Free%
echo Need=%Need%

echo on
IF %Free% GTR %Need% (GOTO Sufficient_Space) ELSE GOTO Insufficient_Space
@echo off

:Insufficient_Space
@ECHO INSUFFICIENT SPACE
GOTO DONE

:Sufficient_Space
@ECHO SUFFICIENT SPACE

:DONE
Run Code Online (Sandbox Code Playgroud)

if-statement goto dos batch-file

6
推荐指数
1
解决办法
2万
查看次数

在while循环内期望-永远循环

我是新来的期待脚本的人,所以请原谅我的绊脚石...

以下是我期望脚本的内容。目的是滚动浏览多个输出屏幕,然后在每个屏幕上提示用户“ Continue?[y / n]”。

最后,当没有更多屏幕时,将显示“%”提示,这应该导致执行退出while循环。

    set more_screens 1
    while {$more_screens > 0} {  
        sleep 10
        expect {
            "\[y/n]" { send "y\r"}
            "% "  { set more_screens 0 }
        }
     }
Run Code Online (Sandbox Code Playgroud)

相反,发生的事情是……它永远停留在while循环中,一遍又一遍地发送“ y”。我已经设置了“ exp_internal 1”,并且从该输出中输出了“似乎”,就像期望一样继续读取已经匹配的文本,因此一直看到“ [y / n]”,并在出现时继续发送“ y” ,实际上只有2个输出屏幕,因此只有2个“ Continue?[y / n]”提示。

(sleep语句可能不是必需的-我只是添加了它来解决问题-并没有-并允许我更好地消化调试输出。)

底线...我的代码中是否有明显的错误?我会提出任何建议,以改善这一点并消除无休止的循环。

在詹姆斯提出了有益的建议之后,下面的编辑添加到此问题。

感谢James的快速回复和有用的建议!但...

您的方法仍然存在相同的问题(尽管您的方法更优雅,我将其添加到我的期望工具包中。)

正如最初指出的那样,该问题似乎肯定是每次执行Expect语句都会重新读取已经读取和比较过的文本。当我执行James的“ exp_continue”代码,并设置“ exp_internal 1”以在屏幕上获取调试输出时,下面的输出是...

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>expect: does "get dump tables\r\n\r% get dump tables\n\r\r\nIfn  TableName           Configured >MaxUse    InUse     LastDropTime\r\n3    cdm_app             100002     190       33        >\r\n3    cdm_conv            2000002    675180    4813      \r\n3    cdm_pdisc           250002     >250002    1304 …
Run Code Online (Sandbox Code Playgroud)

expect while-loop

3
推荐指数
1
解决办法
3476
查看次数

标签 统计

batch-file ×1

dos ×1

expect ×1

goto ×1

if-statement ×1

while-loop ×1