2011-11-14 305 views
0

我在尋找一個批處理腳本,它顯示給定文件中的幾行文字。 例如可以說,我有內容的文件在批處理腳本之間顯示的批處理腳本

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批處理腳本中執行此操作?

+3

你嘗試過什麼嗎? –

回答

1

閱讀HELP FORHELP 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!

我把所有作品拼湊在一起作爲練習。

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" 

也許你們會想要添加一些額外的代碼來檢查參數中給出的開始或結束行是否不存在於文件中並在這些情況下退出讀取循環。