批处理文件 - 如果条件变为无限循环

时间:2018-02-27 13:32:33

标签: batch-file

我有以下条件

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!

1 个答案:

答案 0 :(得分:1)

这段代码中我们很少有小错误。 我将在下面列出它们。在之前由@Mofi讲述(参见他的评论),通过运行IF /来了解IF的用法。在命令提示符下。

  • 我在“=”登录“server = test”
  • 后删除了额外的空格
  • 在IF语句中删除了“then”,因为这种用法是错误的。
  • 添加标签“:iterate”以完成代码。

检查修改后的代码。

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!