我正在尝试在Batch中模拟while循环,这是我的代码:
@echo off
set test=0
:main
call:whileLSS %test% 4 :count
:whileLSS
if %1 LSS %2 (
echo %1
call%3
goto whileLSS
)
goto:EOF
:count
set /a test=%test%+1
goto:EOF
这只输出0,而不是像我想要的那样输出“0 1 2 3”。
问题是循环永远存在,因为%1没有最新的测试值。
这是正确的方法吗?
如何更新%1的值?
有没有办法不用像LSS那样对运营商进行硬编码?
答案 0 :(得分:3)
正如您所知,您无法更改Arg,您可以将arg作为参考并更改引用的var,这需要延迟扩展。
你的第一个子也没有与流分开。
此批次:
@echo off&Setlocal EnableDelayedExpansion
set test=0
:main
call:whileLSS test 4 :count
Goto :Eof
:whileLSS
if !%1! LSS %2 (
echo !%1!
call%3
goto whileLSS
)
goto:EOF
:count
set /a test+=1
goto:EOF
生成此输出:
0
1
2
3
修改强>
if的操作符也可以作为arg:
@echo off&Setlocal EnableDelayedExpansion
set test=0
:main
call:while test LSS 4 :Increment
set test=10
call:while test GTR 4 :Decrement
Goto :Eof
:while
if !%1! %2 %3 (
echo !%1!
call %4 %1
goto while
)
goto:EOF
:Increment
set /a %1+=1
goto:EOF
:Decrement
set /a %1-=1
goto:EOF
答案 1 :(得分:0)
喜欢这个可能吗?
@echo off
:main
set /a a=1
set /P i=Enter i:
call:whileLSS %a% %i%
:whileLSS
echo %1
if %1 LSS %2 call:reinitialize %1 %2
goto:EOF
:reinitialize
set /a c=%1
set /a b=%c%+1
set /a d=%2
call:whileLSS %b% %d%
goto:EOF
答案 2 :(得分:0)
试试这个:
@echo off
Setlocal EnableDelayedExpansion
set test=0
:main
call :whileLSS !test! 4
Goto :Eof
:whileLSS
set i=%1
set j=%2
:loop
if !i! LSS !j! (
echo !i!
call :count
goto :loop
)
goto :EOF
:count
set /a i+=1
goto :EOF