具有多个命令的循环批处理

时间:2016-03-29 22:18:07

标签: string batch-file for-loop

知道为什么这不起作用?我正在尝试创建一个文件扫描其当前目录中的所有批处理文件以获取特定字符串(123456),如果找到则继续执行:end。如果未找到,则文件应将其自身复制到扫描的文件中并继续扫描下一个文件。任何想法和提示表示赞赏!干杯!

    for %%f in (*.bat) do (
        set A=%%f
        set file=%A%
        findstr "123456" %file%
        if %errorlevel%==0 goto end
        copy %0 %A%
        )
    :end

我测试了以下代码:

    SETLOCAL EnableExtensions EnableDelayedExpansion
    for %%f in (*.bat) do (
         set A=%%~f
         set file=%A%
        findstr "123456" %file%
        if %errorlevel%==0 goto end
        copy %0 %A%
        )
    :end

并且代码没有执行goto end命令。输出如下:

    C:\Users\Epidex98\Desktop\routine>(
    set A=ir.bat
     set file=
      findstr "123456"
     if 0 == 0 goto end
     copy "C:\Users\Epidex98\Desktop\routine\ir.bat"
    )

1 个答案:

答案 0 :(得分:3)

SETLOCAL EnableExtensions EnableDelayedExpansion
for %%f in (*.bat) do (
    set A=%%~f
    set file=!A!
    findstr "123456" !file!
    if !errorlevel!==0 goto :end
    copy %0 !A!
    )
:end

或更简单

SETLOCAL EnableExtensions EnableDelayedExpansion
for %%f in (*.bat) do (
    findstr "123456" "%%~f"
    if !errorlevel!==0 goto :end
    copy %0 "%%~f"
    )
:end

但是,如果由于某种原因无法应用延迟扩展:

SETLOCAL EnableExtensions DisableDelayedExpansion
for %%f in (*.bat) do (
    set A=%%f
    call :proc
    if errorlevel 0 goto :end
    copy %0 %%f
    )
rem next command skips :proc subroutine 
goto :end

:proc
  set file=%A%
  findstr "123456" %file%
  set /A myerror=%errorlevel%-1
exit /B %myerror%

:end 

资源(必读):