arquivo em lotes do Windows com o comando goto não está funcionando

Estou com um problema no comando GOTO e nos rótulos afiliados.

Fatos: Dados vários arquivos de uma pasta (são erros de log), preciso abri-los e verificar se eles contêm uma sequência específica. Se sim, elimine alguns caracteres (todos os caracteres após a última aparição de "_", incluindo ele próprio) dos nomes dos arquivos e execute outras operações.

Para cortar os caracteres, estou usando o comando GOTO de uma maneira em loop, como o encontrei descrito aqui:http://www.robvanderwoude.com/battech_ilst_loops.php

O script é:

@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

O script não está sendo executado porque há uma linha vazia após o rótulo loopEnd ?! Se eu estiver escrevendo alguma instrução logo após esse rótulo, elas serão executadas, mas as demais iterações da primeira instrução for não serão executadas (a pasta de erros de log contém mais um arquivo)

Alguém pode fornecer ajuda?

questionAnswers(1)

yourAnswerToTheQuestion