Пакетный скрипт Windows для отображения между строк - PullRequest
0 голосов
/ 14 ноября 2011

Я ищу пакетный скрипт, который отображает пару строк из заданного файла. Например, допустим, у меня есть файл с содержимым

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?

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Вы можете вызвать подпрограмму, перенаправив ее ввод в файл, который вы хотите прочитать, и в строки файла подпрограммы, прочитанные с помощью команды 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"

Возможно, вы захотите добавить дополнительный код, чтобы проверить, отсутствуют ли в файле начальные или конечные строки, заданные в параметрах, и выйти из циклов чтения в этих случаях.

1 голос
/ 15 ноября 2011

read 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, а затем попробуйте добавить SETLOCAL ENABLEDELAYEDEXPANSION вверху вашего BAT-файла и изменить ссылки на переменные вместо% VAR% на! VAR!

Я оставляю все части вместе какупражнения для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...