DOS commande de traitement par lots pour lire des informations depuis un fichier texte
Je suis en train de lire des informations à partir d'un fichier texte à l'aide de windows en ligne de commande, et de l'enregistrer dans une variable comme "jeu info =1234"
Ci-dessous le contenu du fichier txt, en fait j'ai juste besoin du numéro de la révision, et l'emplacement de c'est toujours la même ligne 5, et à partir de la colonne 11 à 15. Dans l'échantillon, il est 1234, et je me demandais est-il un moyen de l'enregistrer dans une variable dans la ligne de commande Dos.
Merci beaucoup!
svninfo.txt:
Path: .
URL: https://www.abc.com
Repository Root: https://www.abc.com/svn
Repository UUID: 12345678-8b61-fa43-97dc-123456789
Revision: 1234
Node Kind: directory
Schedule: normal
Last Changed Author: abc
Last Changed Rev: 1234
Last Changed Date: 2010-04-01 18:19:54 -0700 (Thu, 01 Apr 2010)
Vous devez vous connecter pour publier un commentaire.
Voici une version en ligne:
Revision:
chaîne au début de la ligne. Vous ne saurez jamais si il pourrait ne pas apparaître dans d'autres lieux 🙂fidnstr /R
pour permettre l'expression rationnelle.L'extrait de code suivant montre comment faire:
Sa sortie est
1234
comme souhaité.La
setlocal
est ce que j'utilise dans chaque script pour s'assurer que les variables sont traitées d'une manière connue. Lefor
instruction traite chaque ligne du fichier d'entrée (ledelims
peu arrêts de la ligne de tokenised en mots distincts).La
!line:~
bits sont des sous-chaînes avec!line:~0,10!
être les dix premiers caractères et!line:~10!
reste.Donc, fondamentalement, il vérifie chaque ligne pour voir si elle démarre avec
"Revision: "
et, le cas échéant, des extraits le reste de la ligne pour plus tard.findstr
variante, cependant. Fait l'intention beaucoup plus claire et est un peu plus court, puisque vous n'avez pas à vérifier au début de la ligne avec des sous-chaînes.@SETLOCAL
sur la première ligne, de sorte que le@ECHO OFF
n'affecte pas le réglage de l'écho d'un script d'appel. Aussi, je voudrais remplacer la@ECHO OFF
avec@IF NOT DEFINED _ECHO ECHO OFF
, donc je peux l'utiliserSET _ECHO=1
pour déboguer mes scripts.Utiliser le
for
commande pour analyser le fichier:si vous avez pouvez utiliser les outils GNU, comme gawk
Savoir comment utiliser CMD script habilement est grande, mais à l'aide de PowerShell est encore mieux. Voici une façon de le faire:
Ce qu'il se passe?
$revision
est une variablegc
estGet-Content
, akatype
. Chaque ligne du fichier est une chaîne de caractères dans une séquence (pipeline).?
estWhere-Object
. Il filtre les objets dans un pipeline en fonction d'une condition.{}
délimite un bloc de script$_
est l'objet en cours dans le pipeline.-split
appelleString.Split()
dans .NET, vous donnant un tableau d'objets[1]
index dans le tableau