Как отфильтровать txt файл строкой с использованием пакета

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

Вопрос состоит в том, как код 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 может отличаться, и лицензии могут быть, показал в другом порядке.

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

спасибо за любые подсказки

1
задан Paul R 26 May 2010 в 12:49
поделиться

3 ответа

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

0
ответ дан 3 September 2019 в 00:17
поделиться

Не знаю, откуда у вас цифра 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

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


Разбивка:

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

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

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

2
ответ дан 3 September 2019 в 00:17
поделиться

Загрузите UnxUtils и используйте потоковые процессоры Unix. Возможно, тоже можно будет использовать Powershell.

0
ответ дан 3 September 2019 в 00:17
поделиться