2010-05-26 15 views
1

Je sais que ce genre de problème sera très facile pour vous mais je suis débutant total en mode batch.Comment filtrer le fichier txt par chaîne en utilisant le lot

La question est de savoir comment le code du fichier bat devrait ressembler à générer un nouveau fichier txt d'un fichier spécifique.

par exemple.

Je rapport 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 . . . 

Ce que je veux avoir dans le nouveau fichier de celui-ci sont seulement les lignes:

SingleSite_License 3

Intra_CLIENT_License 9

, mais les deux SingleSite_License et Intra_Client_License doit être pris à partir de la première chaîne trouvée, mais pas nécessaire.

rapport txt peut être différent et les licences peuvent être affichées dans un ordre différent.

si ce n'est pas possible - autre solution peut être juste seulement La valeur libre sera écrite dans un nouveau fichier txt - f.e 3 et 9. de sorte que la dernière chaîne en ligne qui contient des mots spécifiques

merci pour tous les conseils

Répondre

0

écrire une application C. Batch est inutilement kludgy et ne peut probablement même pas faire ce genre de manipulation de flux.

+0

HI Oui vous avez raison = devrait être 4 au lieu de 9 - et tout d'abord merci pour cette solution - cela fonctionne parfaitement. maintenant le seul problème qui m'a quitté est de retarder l'exécution de cette commande. Parce qu'au début, le premier script crée report.txt et le filtre ensuite comme vous l'avez écrit. Je ne sais pas comment les combiner parce que le filtre recherche le fichier qui n'existe pas encore - il faut environ 3-5 s et je n'ai aucune idée de la façon de le retarder - j'ai essayé "PING -n 4 127.0.0.1> nul "mais il ne fait pas de pause. – Antediluvian

2

Je ne sais pas où vous avez obtenu le chiffre de 9 pour la Intra_CLIENT_License (souldn't ce soit 4?), Mais ce script imprime les licences libres pour ces deux codes de produit:

@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 essentiellement couper et de coller votre relevé de notes dans le fichier infile.txt et avons exécuté ce script pour obtenir:

SingleSite_License 3 
Intra_CLIENT_License 4 

(vous pouvez remplacer type infile.txt avec tout ce que la commande dont vous avez besoin pour générer cette sortie).


Répartition:

Le setlocal définit juste au cmd.exe pour permettre des extensions et expansion retardée de variables d'environnement. Tous mes scripts commencent par cela, car c'est tellement utile.

La boucle for traite essentiellement une ligne à la fois, en saisissant les jetons 1 et 3 (a et b) de chacun.

Il suffit ensuite de vérifier a pour connaître les valeurs de licence requises et, si cela correspond, d'en sortir avec b.

+0

Est-ce un lot simple? –

+0

@Jens, Oui, il a été fait sur XP, donc devrait fonctionner sur toutes les versions de Windows prises en charge. N'essayez pas de le replier sur Windows 3.11 :-) Batch a parcouru un long chemin depuis les jours de mort de MSDOS 2.11 - ce n'est toujours pas le cas pour les shells UNIX mais ce n'est pas trop mal. – paxdiablo

+0

Eh bien, un +1 de moi alors :) –

0

Téléchargez UnxUtils et utilisez les processeurs de flux Unix. Peut-être possible de faire avec Powershell aussi.

Questions connexes