开发者

How to filter txt file by string with using batch

I know this kind of problem will be very easy for you but I am total beginner in batch mode.

The question is how bat file code should look like to generate a new txt file from specific one .

for example .

I have report 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
    开发者_如何学Python                          (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 . . . 

What I want to have in new file from this one are only lines :

SingleSite_License 3

Intra_CLIENT_License 9

but both SingleSite_License and Intra_Client_License should be taken from 1st found string -other are not necessary.

report txt can be different and licenses can be showed in different order .

if it not possible - other solution can be just only Free value will be written in new txt file - f.e 3 and 9 . so the last string in line which contains specific words

thank you for any tips


Not sure where you got the figure of 9 for the Intra_CLIENT_License (souldn't it be 4?), but this script will print out the free licences for those two product codes:

@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

I basically cut and pasted your transcript into the infile.txt file and ran this script to get:

SingleSite_License 3
Intra_CLIENT_License 4

(you can replace type infile.txt with whatever command you need to generate that output).


Breakdown:

The setlocal just sets up cmd.exe to allow extensions and delayed expansion of environment variables. All my scripts start with this since it's so useful.

The for loop basically processes one line at a time, grabbing tokens 1 and 3 (a and b) from each.

Then it's a simple matter of checking a for the required licence values and, if it matches, outputting that along with b.


Write a C application. Batch is unnecessarily kludgy and probably can't even do this kind of stream manipulation.


Download UnxUtils and use the Unix stream processors. Might be possible to do with Powershell too.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜