我有以下条件
if %dayNo% LSS 6 (
set /a dayNo=%dayNo%+1
goto reStart
)
*next code*
我期待如果dayNo已经大于6,它将继续下一个代码但它会返回到reStart(即使dayNo已经是条件,它也会返回到此状态)大于6)因此创造了一个无限循环。
为什么会发生这种情况,我应该如何解决这个问题?
编辑2:(代码复制错误)
我制作了一个代码来复制错误。假设我们在Desktop中有一个“test”文件夹,子文件夹为“day5”和“day6”。我在第5天添加了一个文本文件,因此代码应该正常运行直到第6天,然后继续在if语句中执行goto语法并将代码循环到无穷大。我使用暂停来检查代码,因此可以随意删除其中的REM。
REM @echo off
REM setlocal enableDelayedExpansion
set server= test
set /a dayNo=5
:reStart
set day=day%dayNo%
echo %day%
cd %USERPROFILE%\Desktop\
REM pause
if not exist "%USERPROFILE%\Desktop\%server%\%day%\*.txt" then ( goto iterate )
REM pause
if exist "\tool\%server%\%day%" then (
echo next code
REM pause )
:iterate
if %dayNo% LSS 6 then (
set /a dayNo=%dayNo%+1
REM pause
goto reStart )
echo This is the desired behavior and the code works!
答案 0 :(得分:1)
这段代码中我们很少有小错误。 我将在下面列出它们。在之前由@Mofi讲述(参见他的评论),通过运行IF /来了解IF的用法。在命令提示符下。
检查修改后的代码。
REM Following changes are done
REM removed an extra space before test "server= test"
REM removed "then" from IF.
REM proper line align done with ()
@echo off
REM setlocal enableDelayedExpansion
set server=test
set /a dayNo=5
:reStart
set day=day%dayNo%
echo %day%
cd "%USERPROFILE%\Desktop\"
REM pause
if not exist "%USERPROFILE%\Desktop\%server%\%day%\*.txt" ( goto iterate )
:iterate
REM pause
if exist "\tool\%server%\%day%" (
echo next code
REM pause
)
if %dayNo% LSS 6 (
set /a dayNo=%dayNo%+1
pause
goto reStart )
echo This is the desired behavior and the code works!