Как реализовать вложенные циклы do while в пакетном файле Windows? - PullRequest
1 голос
/ 15 февраля 2011

Вот моя попытка, но она продолжает выдавать ошибку -

set /a "x = 1"
echo %x%
:while1
    if %x% leq 3 (
        set /a "y = 1"

        :while2
          if %y% leq 4 (
               echo %y% 
               set /a "y = y + 1"               
               goto :while2
          )
        echo %x%  
        set /a "x = x + 1"
        goto :while1
    )

Ошибка - G: \ A> set / a "x = 1" G: \ A> эхо 1 1 Синтаксис команды неверен.

1 Ответ

3 голосов
/ 15 февраля 2011

Существует несколько проблем.

1-% y% не работает должным образом, так как он раскрывается в момент разбора блока скобок перед его выполнением.

if %x% leq 3 (
        set /a "y = 1"
          if %y% leq 4 (
...

Расширяется до

if 1 leq 3 (
        set /a "y = 1"
          if leq 4 (
...

Вам лучше использовать отложенное расширение! Y!

2- Ваша синтаксическая ошибка является результатом "метки первой строки" непосредственно передзакрывающая скобка.Метки разрешены в скобках круглых скобок, но они всегда должны использоваться в двойных строках.

3 - переходы-готоки всегда отменяют все блоки скобок. Это не проблема в вашем случае, но в большинстве случаев это не так.Хорошая идея, использовать goto's в блоке

@echo off
setlocal enabledelayedexpansion
set /a "x = 1"

echo %x%
:while1
if %x% leq 3 (
    set /a "y = 1"

    :while2
    :while2 This is the Second-Line-Label
    if !y! leq 4 (
        echo y=!y!
        set /a "y = y + 1"
        goto :while2
    )
    echo x=!x!
    set /a "x = x + 1"
    goto :while1
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...