Как отфильтровать текстовый файл по строке с помощью пакета - PullRequest
1 голос
/ 26 мая 2010

Я знаю, что проблема такого рода будет для вас очень легкой, но я в режиме пакетной обработки только начинаю.

Вопрос в том, как должен выглядеть код bat-файла для генерации нового txt-файла из конкретного.

например.

У меня есть сообщение TXT

Displaying status for license file: 7788@Server01

License Server: server01

                    License    In Use   Free
                    -------    ------   ----
                    Design*      1       6
                               (user1@host1)   127 server01 7788  4402

                  Assembly*      0       4

                       Pro       0      15

                     AdvSE       2       3
                              (user2@host2)  AdvSE server01 7788  2706
                              (user3@host3)  AdvSE server01 7788  1503

        SingleSite_License       1       3
                              (user4@host4)      SingleSite_License server01 7788  2003

      Intra_CLIENT_License        1       4
                              (user2@host2)      Intra_CLIENT_License server01 7788  2003

                       CAD       1      32
                              ^(user2@host2)     CAD server01 7788   501
* = License Extensions - Available only on startup.
^ = Borrowed License.
Press any key to continue . . . 

В этом файле я хочу получить только строки:

SingleSite_License 3

Intra_CLIENT_License 9

но SingleSite_License и Intra_Client_License должны быть взяты из 1-й найденной строки - другие не нужны.

Отчет TXT может отличаться, и лицензии могут быть показаны в другом порядке.

если это невозможно - другое решение может быть только свободным значением будет записано в новый текстовый файл - например, 3 и 9. поэтому последняя строка в строке, которая содержит конкретные слова

спасибо за любые советы

Ответы [ 3 ]

2 голосов
/ 26 мая 2010

Не знаю, где вы взяли цифру 9 для Intra_CLIENT_License (разве это не 4?), Но этот скрипт распечатает бесплатные лицензии на эти два кода продукта:

@echo off
setlocal enableextensions enabledelayedexpansion
for /f "tokens=1,3" %%a in ('type infile.txt') do (
    if "x%%a"=="xSingleSite_License" (
        echo %%a %%b
    )
    if "x%%a"=="xIntra_CLIENT_License" (
        echo %%a %%b
    )
)
endlocal

Я в основном вырезал и вставил вашу расшифровку в файл infile.txt и запустил этот скрипт, чтобы получить:

SingleSite_License 3
Intra_CLIENT_License 4

(вы можете заменить type infile.txt любой командой, которая вам нужна для генерации этого вывода).


Разбивка:

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

Цикл for в основном обрабатывает одну строку за раз, захватывая токены 1 и 3 (a и b) из каждой.

Тогда нужно просто проверить a требуемых значений лицензии и, если он совпадает, вывести его вместе с b.

0 голосов
/ 26 мая 2010

Скачать UnxUtils и использовать потоковые процессоры Unix. Может быть возможно сделать и с Powershell.

0 голосов
/ 26 мая 2010

Написать заявку на языке Си. Пакет неоправданно неопрятен и, вероятно, даже не может выполнять подобные манипуляции с потоком

...