在批处理脚本之间显示的批处理脚本
问题描述:
我在寻找一个批处理脚本,它显示给定文件中的几行文字。 例如可以说,我有内容的文件在批处理脚本之间显示的批处理脚本
SERVICE_NAME: Appinfo
DISPLAY_NAME: Application Information
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
SERVICE_NAME: BFE
DISPLAY_NAME: Base Filtering Engine
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
SERVICE_NAME: BITS
DISPLAY_NAME: Background Intelligent Transfer Service
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
SERVICE_NAME: CertPropSvc
DISPLAY_NAME: Certificate Propagation
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
SERVICE_NAME: Cissesrv
DISPLAY_NAME: HP Smart Array SAS/SATA Event Notification Service
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
现在,如果我想打印从SERVICE_NAME: BFE
直到SERVICE_NAME: CertPropSvc
。我如何在Windows批处理脚本中执行此操作?
答
阅读HELP FOR
和HELP IF
然后开始实施循环读取文件这样
for /f "tokens=*" %%a in (c:\temp\services.txt) do (
echo %%a
)
,并添加到它的内容,一些检查...
for /f "tokens=*" %%a in (c:\temp\services.txt) do (
if /i "%%a"=="SERVICE_NAME: BFE" echo Begin here
if /i "%%a"=="SERVICE_NAME: CertPropSvc" echo End here
)
一次你有这个设置,使用一个变量来标记你需要复制的部分,像这样
if /i "%%a"=="SERVICE_NAME: BFE" set /a inside=1
if /i "%%a"=="SERVICE_NAME: CertPropSvc" set /a inside=0
你需要初始化这个变种循环
set /a inside=0
之外,使用这个变量来决定是否使用行
if %inside%==1 echo %%a
,但是,它可能无法工作,你会需要照顾延迟扩展 ...读取HELP SET
,然后尝试在BAT文件的顶部添加SETLOCAL ENABLEDELAYEDEXPANSION
,并将变量引用(而不是%VAR%)更改为!VAR!
我把所有作品拼凑在一起作为练习。
答
您可以调用子程序将其输入重定向到您要读取的文件,并在子程序读取文件行中使用set /P line=
命令。该子程序必须搜索起始行,然后从该行搜索到echo
,直到结束。下面的批处理文件需要从参数%1%2的起始和结束行:
@echo off
call :SearchStart %1 %2 < the_file.txt
exit /b
:SearchStart
set /P line=
if /I not "%line%" == "%~1" goto SearchStart
:PrintUntilEnd
echo/%line%
set line=
set /P line=
if /I not "%line%" == "%~2" goto PrintUntilEnd
为了得到你想要的,如果前面的批处理文件被命名为BETWEEN.BAT
行:
BETWEEN "SERVICE_NAME: BFE" "SERVICE_NAME: CertPropSvc"
也许你们会想要添加一些额外的代码来检查参数中给出的开始或结束行是否不存在于文件中并在这些情况下退出读取循环。
你尝试过什么吗? –