首页 > 解决方案 > 跳回到循环内的标签?

问题描述

我需要遍历通过命令行设置的文件列表,并遍历本地数组。

不知道更好的方法,我尝试使用标签,但 cmd 的行为不符合预期:

@echo off 

if "%~1"=="" GOTO PARAM

setlocal enableextensions enabledelayedexpansion

set colors[0]="<style>yellow</style>"
set colors[1]="<style>blue</style>"

set COUNTER=0
for %%f in ("%1") DO (
    echo Handling %%f
    
    echo !COUNTER!

:LOOP
    IF !COUNTER!=="0" GOTO CASE_YELLOW
    IF !COUNTER!=="1" GOTO CASE_BLUE
    IF !COUNTER! GTR 6 GOTO END
    set /a COUNTER +=1
)
GOTO END

:CASE_YELLOW
ECHO Case YELLOW
GOTO LOOP

:CASE_BLUE
ECHO Case BLUE
GOTO LOOP

:PARAM
echo Usage : %0 myfile.xml/*.xml

:END
ECHO Done.

这是使用“myscript.bat file*.xml”的输出:

Handling file1.xml
0
Handling fileé.xml
1
Done.

谢谢你。

标签: windowsbatch-filecmd

解决方案


值得庆幸的是,您在代码注释中提供了足够的信息,以了解您将要使用参数的位置。

也就是说,如果您想在循环中满足条件时执行某些操作,并在执行完之后继续循环,您只需更改为调用您的子函数,然后结束文件,这将返回到您的位置在循环。

这应该做必要的


@(setlocal enableextensions enabledelayedexpansion
  echo off 
  set "colors[0]=<style>yellow</style>"
  set "colors[1]=<style>blue</style>"
  set /a "COUNTER=0"
  SET "SRC=%~1"
)

IF /I "%~1" EQU "" (
  Call :PARAM
) ELSE (
  CALL :Main
)

( ENDLOCAL
  CALL :End
  EXIT /B 0
)

:Main
  For %%f in ("%SRC%") DO (
    IF !COUNTER! < 6 (
       echo Handling %%f
       echo !COUNTER!
       CALL ECHO.IN MAIN LOOP COLOR= "%%Colors[%counter%]%%"
       IF !COUNTER!==0 CALL :CASE_YELLOW
       IF !COUNTER!==1 CALL :CASE_BLUE
       set /a "COUNTER+=1"
     )  ELSE (
       echo.exiting.
       GOTO :EOF
     )
  )
GOTO :EOF

:CASE_YELLOW
  ECHO Case YELLOW
  ECHO.In sub function yellow COLOR = "!Colors[%counter%]!"
GOTO :EOF

:CASE_BLUE
  ECHO Case BLUE
  ECHO.In sub function blue COLOR= "!Colors[%counter%]!"
GOTO :EOF

:PARAM
  echo Usage : %0 myfile.xml/*.xml
GOTO :EOF

:END
  ECHO Done.
  Here's the out
GOTO :EOF





推荐阅读