【发布时间】:2014-03-08 23:08:43
【问题描述】:
过去 3 小时我一直在尝试解决这个问题,但找不到解决方案。这是我的批处理脚本:
if NOT Exist Counter.txt GOTO START
Type c:\counter.txt
if %COUNTER% EQU %Cycles% goto Pass
if NOT %COUNTER% EQU %Cycles% goto Cycle
:START
Set COUNTER=0
set CYCLES=250
:Cycle
set /A COUNTER=%COUNTER%+1 <----------- PROBLEM
echo Iteration %COUNTER% of %CYCLES%
echo Delay 3 seconds to reboot
choice /cy /n /t:y,3
warmboot.com
:Pass
pause
它的作用是运行文件“warmboot.com”(它会重新启动我的 PC)并运行 250 个周期。一旦循环运行了 250 次(即当计数器等于循环数时),它就会停止。
在 Windows 下,这是可行的。但是,这在 DOS 环境下不起作用。我已经尝试了从 v4 一直到 v6.22 甚至 v7 的版本,当它到达“问题”行时它们都失败了。
如果我这样做:
set /A COUNTER=%COUNTER%+1
echo %Counter%
或者这个:
set /A COUNTER+=1
echo %Counter%
两者都将返回一个空行,即它不显示任何输出。
如果我输入:
set /?
然后它显示:
显示、设置或删除 cmd.exe 环境变量。
SET [变量=[字符串]]
variable 指定环境变量名。
string 指定一系列字符分配给变量。
但在 Windows 中的 CMD 下键入相同的命令会显示更多内容。我在想 DOS 下的 SET 函数不支持算术函数,但出于工作目的,我只能在 DOS 下运行我的脚本。
有什么想法吗?
【问题讨论】:
-
我漂亮确定普通 DOS 无法做到这一点。而是编写一个实际的程序(有很多语言可供选择,例如 Turbo Pascal 或 C,甚至可能是 QBasic)。
-
@Michael Madsen,我不熟悉这些语言,出于工作需要,我必须在 DOS 中运行批处理脚本。
-
美好的旧时光...难道没有随 DOS 一起交付的 BASIC 吗?如果我没记错的话,它只有一个 EXE,而且很小(不到 1 MB?)
-
@shadowz1337:你的工作要求是否明确声明它必须是一个批处理脚本,或者只是它必须在DOS中运行?我提到的所有编译器/语言都在普通的 16 位 DOS 中运行,为了制作这样的程序,要学习的东西很少。
-
第 1 行和第 2 行将在 MSDos 中工作。第 3 行和第 4 行会给你语法错误。您确定您使用的是 MSDos?
标签: batch-file dos