与转到命令窗口批处理文件无法正常工作与转到命令窗口批处理文件无法正常工作(windows batch

2019-05-11 22:21发布

我有GOTO命令和附属标签的问题。

事实:鉴于从文件夹中的一堆文件(他们是错误日志),我需要打开它们,检查它们是否包含一个特定的字符串。 如果是,那么消除文件名某些字符(的“_”最后出场后,所有的字符,包括自身)和其他操作。

用于切断字符我在一个循环方式使用GOTO命令,我发现这里所描述: http://www.robvanderwoude.com/battech_while_loops.php

脚本是:

@echo off
setlocal EnableDelayedExpansion

cls

for %%X in (D:\e-pub\outbox\logs\*.*) do (

    for /F "tokens=7" %%S in (%%X) do (

        if /i "%%S"=="<ml>" (
            SET fisier=%%~nX
            SET cond=!fisier:~-1!
            SET fisier=!fisier:~0,-1!

            :loopStart
            rem condition to break the loop
            if !cond!==_ goto loopEnd
            SET cond=!fisier:~-1!
            SET fisier=!fisier:~0,-1!
            goto loopStart

            :loopEnd

            rem here it should be out of a loop
            rem other stuff to do with var !fisier!
            rem the following line is not executed because of the label loopEnd
            echo !fisier!
        )
    )
) 

pause

该脚本没有运行,因为在标号loopend后的空行? 如果我说的标签将被执行,但迭代从第一for语句休息之后编写任何指令不被执行(在错误日志文件夹中包含更多的一个文件)

有人可以提供帮助?

Answer 1:

你有两个问题。

一个问题是,一个goto打破一个for循环。 另外,标签是在括号相当困难。

总是转到休息和所有嵌套的循环,即使转到的标签是相同的块,和换变量跳转后立即消失。

在括号标贴的“两线”为本! 我尝试用标签,这里有一些结果括号。

当标签发生时,下一行必须在用于“次要”行的正确格式。

这就是为什么失败。

(
:this label fails with a syntax error
)

(
:this works
:because this line is a "legal" secondary line
)

(
:: The remark style
:: fails, because it's not "legal" to use a double colon, because it's not a legal path (in the most cases)
)

(
:and now I got courious & echo This will not echo'd
:but & echo You can see this !
)

对于第二线批次分析器的一些步骤被跳过。

@不工作, @echo Hello试图启动一个名为@echo.bat

括号内的分裂失败,就像echo( hello
标签handeled作为文件名, :echo检查仅在:echo是一个有效的文件名,然后跳过这一部分。

::hello搜索驱动器上::
为了测试驱动::可以创建subst :: c:\temp
作为标签只是在第二行被忽略,与符号,也管工作,但上档::必须存在。

(
echo @echo This is %~f0
) > %TEMP%\testLabel.bat

REM create Drive ::
subst :: %temp% 
(
:Label 
::\testLabel.bat The bat will not be executed | echo But this
)
subst /D ::


文章来源: windows batch file with goto command not working