Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 如何使用多个循环来排除字符串?_Loops_Batch File_Service - Fatal编程技术网

Loops 如何使用多个循环来排除字符串?

Loops 如何使用多个循环来排除字符串?,loops,batch-file,service,Loops,Batch File,Service,我正在尝试做一个不可能的循环组合。:)我需要的是从所有服务中排除特定的服务列表,以及所有这些脚本本身(没有外部文件) 我需要将几个循环组合起来,我想这对我来说太复杂了。:) 在第一阶段,通过“服务名称:”循环加载服务: 第二,加载字符串列表(服务名称)通过“S_”识别 与输出进行比较和排除 有一种更简单的方法可以工作,但纯粹出于好奇,这有可能工作吗?findstr可以检查几个单词,因此将列表转换为一行单词,并将这一行与findstr一起使用会使事情变得非常简单: @echo off setloc

我正在尝试做一个不可能的循环组合。:)我需要的是从所有服务中排除特定的服务列表,以及所有这些脚本本身(没有外部文件)

我需要将几个循环组合起来,我想这对我来说太复杂了。:)

  • 在第一阶段,通过“服务名称:”循环加载服务:
  • 第二,加载字符串列表(服务名称)通过“S_”识别
  • 与输出进行比较和排除

  • 有一种更简单的方法可以工作,但纯粹出于好奇,这有可能工作吗?

    findstr
    可以检查几个单词,因此将列表转换为一行单词,并将这一行与
    findstr
    一起使用会使事情变得非常简单:

    @echo off
    setlocal enabledelayedexpansion
    REM convert list to line:
    for /f "tokens=2* delims=_" %%s IN ('findstr /b "S_" "%~f0"') DO set "exclude=!exclude! %%s"
    REM for each service name do:
    for /f "tokens=2 delims=: " %%a IN ('sc query state^= all ^|find "SERVICE_NAME:"') do (
      REM if it is not in exclude list, echo it:
      echo %%a|findstr "%exclude%">nul || echo %%a
    )
    
    goto :eof
    REM list of services to exclude:
    S_Dhcp
    S_WSearch
    S_XboxNetApiSvc
    S_SysMain
    S_TabletInputService
    S_wuauserv
    S_wudfsvc
    S_WwanSvc
    

    您希望%%X的
    循环做什么??请移除标签,因为它不适用!!(读取标签信息)第三个循环必须将第一个循环与第二个循环进行比较。。。最有问题的是什么?苹果加橙子?;-)请回答您的问题,并准确描述您正试图实现的目标;也许添加一些示例输入/输出数据是一个好主意…第一个和第二个循环本身运行良好,您可以尝试。。。首先列出所有服务,然后从文件本身列出服务。。。那我就需要把两者都排除在外。我不知道我要说的有多具体……你是想杀死所选的服务吗?或者只是想学习如何使用封闭FOR循环?:)ya Thank rest很简单:)我只是没想到把多行代码转换成一行。请记住,这是有限制的,但它应该能满足您的需要。
    
    @echo off
    setlocal enabledelayedexpansion
    REM convert list to line:
    for /f "tokens=2* delims=_" %%s IN ('findstr /b "S_" "%~f0"') DO set "exclude=!exclude! %%s"
    REM for each service name do:
    for /f "tokens=2 delims=: " %%a IN ('sc query state^= all ^|find "SERVICE_NAME:"') do (
      REM if it is not in exclude list, echo it:
      echo %%a|findstr "%exclude%">nul || echo %%a
    )
    
    goto :eof
    REM list of services to exclude:
    S_Dhcp
    S_WSearch
    S_XboxNetApiSvc
    S_SysMain
    S_TabletInputService
    S_wuauserv
    S_wudfsvc
    S_WwanSvc
    
    @echo off
    setlocal EnableDelayedExpansion
    
    rem Load the list of names as a string, enclose each name in slahes
    rem in order to avoid partial name matches (like NetApi in XboxNetApiSvc)
    set "exclude=/"
    for %%S in (
    
    Dhcp
    WSearch
    XboxNetApiSvc
    
    ) do set "exclude=!exclude!%%S/"
    
    rem For each active service
    FOR /F "tokens=2 delims=: " %%A IN ('sc query state^= all ^|find "SERVICE_NAME:"') do (
       rem If the name is not in the exclude list, echo it:
       IF "!exclude:/%%A/=!" EQU "%exclude%" echo %%A
    )