gpt4 book ai didi

带有goto命令的windows批处理文件不起作用

转载 作者:可可西里 更新时间:2023-11-01 13:51:03 28 4
gpt4 key购买 nike

我对 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 语句的其余迭代将不会被执行(日志错误文件夹包含更多一个文件)

有人可以提供帮助吗?

最佳答案

你有两个问题。

一个问题是 goto 会中断 for 循环。另外,括号中的标签相当困难。

goto 总是中断所有嵌套循环,即使 goto 的标签在同一个 block 中,并且 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.
标签作为文件名处理,: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 ::

关于带有goto命令的windows批处理文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3978655/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com