如何使用批处理按字符串过滤文本文件

时间:2010-05-26 12:36:29

标签: windows batch-file dos

我知道这种问题对你来说很容易,但我是批处理模式的初学者。

问题是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都应该从第一个找到的字符串中取出 - 其他都不是必需的。

报告txt可以不同,许可证可以按不同的顺序显示。

如果不可能 - 其他解决方案可能只是自由值将写入新的txt文件 - f.e 3和9。所以行中的最后一个字符串包含特定的单词

感谢您提供任何提示

3 个答案:

答案 0 :(得分:2)

不确定9的{​​{1}}的数字在哪里(不是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循环基本上一次处理一行,从每个行中抓取代币1和3(fora)。

然后检查b所需的许可证值是一件简单的事情,如果匹配,则将其与a一起输出。

答案 1 :(得分:0)

编写C应用程序。批处理是不必要的kludgy,甚至可能甚至不能进行这种流操作。

答案 2 :(得分:0)

下载UnxUtils并使用Unix流处理器。也可能与Powershell有关。