Supposons que j'ai une valeur telle que "Abc_123" qui est stockée dans une variable dans un fichier batch (cmd). Je veux finir avec une variable qui ne contient que "123". Existe-t-il un moyen intégré de le faire?
Je ne suis pas très pointilleux sur la méthode ou les performances, tant qu'il est intégré à un système Windows (Vista / 2008) typique.
help set
comme mentionné dans Quelle est la meilleure façon de faire une sous-chaîne dans un fichier batch? sur StackOverflow.%string:~%start%,%len%%
CALL
, commeCALL SET _substring=%%_donor:~%_startchar%,%_length%%%
Si vous voulez juste tout après le trait de soulignement (et que vous ne connaissez pas nécessairement la longueur de la chaîne ou où se trouve le trait de soulignement, mais que vous pouvez compter qu'il n'y a qu'un seul trait de soulignement), essayez:
Fondamentalement, votre chaîne sera divisée en jetons en utilisant le trait de soulignement comme délimiteur (delims = _). Seul le second (jetons = 2) sera transmis (en tant que variable %% a) à la boucle for. La boucle ne s'exécutera qu'une seule fois puisque vous avez affaire à une seule chaîne dans ce cas.
Si vous souhaitez enregistrer les éléments avant et après le trait de soulignement, essayez:
Notez que %% a est la variable pour le premier jeton de la division; %% b est la variable du deuxième jeton de la division.
la source
Si vous trouvez que le langage batch n'est pas assez puissant pour faire ce que vous voulez - et cela ne vous prendra probablement pas trop de temps pour arriver à ce point - vous pouvez utiliser Windows PowerShell . Ce n'est pas installé par défaut sur toutes les versions de Windows, mais vous pouvez le télécharger gratuitement.
Si vous n'aimez pas le langage PowerShell, il y a Perl. Vous devrez cependant l'installer sur tous les systèmes. Il y en a aussi d'autres.
la source
la source
*
gourmand? J'ai utilisé un bon vieuxIF NOT ... GOTO :replace
, mais ce serait bien s'il y avait une meilleure façon._
il y en a, passez en boucle au dernier, puisset var