我花了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
Run Code Online (Sandbox Code Playgroud)
它正在做的是运行文件"warmboot.com"(重新启动我的电脑)并运行250个周期.一旦循环运行250次(即当计数器等于循环时),它就会停止.
在Windows下,这是有效的.但是,这在DOS环境下不起作用.我已经尝试了从v4到v6.22甚至v7的版本,当它到达"问题"行时它们都会失败.
如果我这样做:
set /A COUNTER=%COUNTER%+1
echo %Counter%
Run Code Online (Sandbox Code Playgroud)
或这个:
set /A COUNTER+=1
echo %Counter%
Run Code Online (Sandbox Code Playgroud)
两者都将返回一个空行,即它不显示任何输出.
如果我输入:
set /?
Run Code Online (Sandbox Code Playgroud)
然后它显示了这个:
显示,设置或删除cmd.exe环境变量.
SET [variable = [string]]
variable指定环境变量名称.
string指定要分配给变量的一系列字符.
但在Windows下的CMD下键入相同的命令会显示更多内容.我认为DOS下的SET函数不支持算术函数,但出于工作目的,我只能在DOS下运行我的脚本.
有任何想法吗?
小智 61
我意识到你已经找到了另一个答案 - 但事实是你的原始代码几乎是正确的但是语法错误.
您的代码包含该行
set /A COUNTER=%COUNTER%+1
Run Code Online (Sandbox Code Playgroud)
可行的语法很简单......
set /A COUNTER=COUNTER+1
Run Code Online (Sandbox Code Playgroud)
有关SET命令的所有详细信息,请参见http://ss64.com/nt/set.html.我只是想为其他没有使用FreeDOS选项的人添加这个说明.
确实,set在DOS中没有允许算术的选项。不过,您可以做一个巨大的查询表:
if %COUNTER%==249 set COUNTER=250
...
if %COUNTER%==3 set COUNTER=4
if %COUNTER%==2 set COUNTER=3
if %COUNTER%==1 set COUNTER=2
if %COUNTER%==0 set COUNTER=1
Run Code Online (Sandbox Code Playgroud)