2011-02-15 162 views
1

這是我的嘗試,但它一直給錯誤 -如何在Windows批處理文件中實現嵌套的do while循環?

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>置位/一個 「X = 1」 G:\ A>回聲1 的語法命令不正確。

回答

3

存在多個問題。

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-您的語法錯誤是恰好在右括號之前的「First-Line-Label」的結果。 標籤允許在括號中,但它們應該總是用雙行。

3-轉到跳動永遠取消所有括號塊 這不是你的情況的問題,但在大多數情況下,它是不是一個好主意,使用goto語句在一個塊

@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 
)