2010-05-26 93 views
1

我知道這種問題對您來說很容易,但我總是以批處理模式初學者。如何使用批次字符串篩選txt文件

問題是bat文件代碼應該如何從特定的文件生成新的txt文件。例如

我有報告TXT

Displaying status for license file: [email protected] 

License Server: server01 

        License In Use Free 
        ------- ------ ---- 
        Design*  1  6 
           ([email protected]) 127 server01 7788 4402 

        Assembly*  0  4 

         Pro  0  15 

        AdvSE  2  3 
           ([email protected]) AdvSE server01 7788 2706 
           ([email protected]) AdvSE server01 7788 1503 

     SingleSite_License  1  3 
           ([email protected])  SingleSite_License server01 7788 2003 

     Intra_CLIENT_License  1  4 
           ([email protected])  Intra_CLIENT_License server01 7788 2003 

         CAD  1  32 
           ^([email protected])  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。所以行的最後一個字符串,它包含特定的詞

感謝你對任何提示

回答

0

編寫一個C語言的應用程序。批處理是不必要的,可能甚至不能進行這種流操作。

+0

HI 是的你是對的=應該是4而不是9 - 首先感謝你的解決方案 - 它完美的工作。 現在唯一讓我留下的問題是延遲執行這個命令。因爲一開始第一個腳本會創建report.txt,然後在您寫入時對其進行過濾。我不知道如何合併它們,因爲過濾器搜索不存在的文件 - 它需要大約3-5秒,我不知道如何延遲它 - 我試過「PING -n 4 127.0.0.1> nul 「但它不會暫停。 – Antediluvian 2010-05-26 15:37:05

2

不知道從哪裏得到的9的數字爲Intra_CLIENT_License(souldn't它是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(ab)。

然後,只需檢查a就可以獲得所需的許可證值,如果匹配,則將其與b一起輸出。

+0

這是簡單的批次嗎? – 2010-05-26 12:54:50

+0

@Jens,是的,它是在XP上完成的,因此可以在所有支持的Windows版本上運行。不要試圖將它移植到Windows 3.11上:-)自MSDOS 2.11的大腦死亡日期以來,批處理已經走過了很長的一段路 - 它仍然不匹配UNIX shell,但它並不壞。 – paxdiablo 2010-05-26 12:59:30

+0

那麼,從我的+1然後:) – 2010-05-26 13:03:04

0

下載UnxUtils並使用Unix流處理器。也可以用Powershell來做。

相關問題