我是一个老前辈,是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) 我是新来的期待脚本的人,所以请原谅我的绊脚石...
以下是我期望脚本的内容。目的是滚动浏览多个输出屏幕,然后在每个屏幕上提示用户“ 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)