2

У меня есть пакетный скрипт, который будет печатать всю строку строки поиска в текстовом файле.

   for %%i in (configure.txt) do (
   FINDSTR /C:"Widget Name=" %%i >> output.txt
   )

Вот как будет выглядеть мой файл Configure.txt:

   <Widget Name="example_1_new" Type="IFC"/>
   <Property Name="exmaple_2_old"/>
   <Content>
   <Widget Name="example_3_new"/>
   <Widget Name="example_4_old"/>
   <Widget Name="exmaple_1_new"/>
   </Content>

Я хочу напечатать следующее слово (example1) после «Widget Name =» (Search String), а также найти дубликаты слова (Example1) и напечатать его счетчик рядом с ним, так что мой вывод должен выглядеть так:

   example_1_new 2

Может кто-нибудь дать мне знать, как это сделать? Обратите внимание, что файл configure.txt содержит около 1000 строк данных, как указано выше. Я просто привел пример.

1 ответ1

2

Следующий откомментированный фрагмент кода должен выполнить эту работу:

@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion

rem delete auxiliary variables
for /F %%G in ('set ___ 2^>NUL') do set "%%G=" 

rem count up number of occurrences 
for /F tokens^=2^ delims^=^" %%G in ('
    FINDSTR /C:"Widget Name=" "configure.txt"
  ') do set /A "___%%G+=1"

rem subtract 1 to get number of duplicates
for /F "tokens=1,2 delims==" %%G in ('set ___ 2^>NUL') do set /A "%%G-=1"

REM output: does dot work if your data contains _ underscore
REM for /F "tokens=1,2 delims=_=" %%G in ('set ___ 2^>NUL') do echo %%G %%H

rem alternative output
for /F "tokens=1,2 delims==" %%G in ('set ___ 2^>NUL') do (
  set "_auxvarname=%%G"
  call set "_auxvarname=%%_auxvarname:~3%%"
  SETLOCAL EnableDelayedExpansion
    echo !_auxvarname! %%H
  ENDLOCAL
)

Чтобы создать выходной файл, измените последние строки следующим образом:

rem alternative output
> output.txt (
    for /F "tokens=1,2 delims==" %%G in ('set ___ 2^>NUL') do (
      set "_auxvarname=%%G"
      call set "_auxvarname=%%_auxvarname:~3%%"
      SETLOCAL EnableDelayedExpansion
        echo !_auxvarname! %%H
      ENDLOCAL
    )
)

Вывод с данными, объединенными из исходного вопроса и из обновленного :

==> type "configure.txt"
<Widget Name="example1"/>
<Property Name="exmaple2"/>
<Content Name="example3"/>
<Widget Name="example4"/>
<Widget Name="example1"/>
<Widget Name="example_1_new" Type="IFC"/>
<Property Name="exmaple_2_old"/>
<Content>
<Widget Name="example_3_new"/>
<Widget Name="example_4_old"/>
<Widget Name="exmaple_1_new"/>
</Content>

==> D:\bat\SU\1094786.bat
example1 1
example4 0
example_1_new 0
example_3_new 0
example_4_old 0
exmaple_1_new 0

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .