windows - 跳回到循环内的标签?
问题描述
我需要遍历通过命令行设置的文件列表,并遍历本地数组。
不知道更好的方法,我尝试使用标签,但 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.
谢谢你。
解决方案
值得庆幸的是,您在代码注释中提供了足够的信息,以了解您将要使用参数的位置。
也就是说,如果您想在循环中满足条件时执行某些操作,并在执行完之后继续循环,您只需更改为调用您的子函数,然后结束文件,这将返回到您的位置在循环。
这应该做必要的
@(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
推荐阅读
- postgresql - Postgres中下划线的排序问题
- php - 从数据库中删除记录的ajax不会在laravel中触发重定向
- netsuite - 在 Netsuite 2.0 中加载时如何将额外的过滤器和列添加到现有的已保存搜索中
- php - 如何将函数作为参数传递php类
- bash - 自动保存电子邮件附件以映射到 qmail 和 Reformime
- html - Haskell Yesod 网络表单到 Sqlite3
- c# - 如何列出使用 MEF2 实现接口的所有类型?
- kubernetes - 迁移到 Kubernetes 1.16 所需的更改
- tomcat8 - 当服务器类型 = 定期时,LifecycleListener 在服务器启动后未侦听
- javascript - 元素内部的自定义 div 不保留属性