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 ステートメントからの残りの反復は実行されません (ログ エラー フォルダーには複数のファイルが含まれます)。
誰かが助けを提供できますか?