我正在寻找一个显示给定文件中几行的批处理脚本。 例如,假设我有一个内容为
的文件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批处理脚本中执行此操作?
答案 0 :(得分:1)
阅读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
你需要在循环之外初始化这个var
set /a inside=0
并使用此变量来决定是否使用该行
if %inside%==1 echo %%a
但是,它可能无效,您需要处理延迟扩展 ...阅读HELP SET
,然后尝试在BAT顶部添加SETLOCAL ENABLEDELAYEDEXPANSION
文件,并将变量引用而不是%VAR%更改为!VAR!
我把所有碎片放在一起作为练习。
答案 1 :(得分:1)
您可以使用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"
也许您可能需要添加一些额外的代码来检查参数中给出的起始行或结束行是否在文件中不存在,并在这些情况下退出读取循环。