2011-01-04 02:42:12 +0000 2011-01-04 02:42:12 +0000
28
28

Comment extraire une partie d'une chaîne de caractères dans un fichier batch Windows ?

Supposons que j'ai une valeur telle que “Abc_123” qui est stockée dans une variable d'un fichier batch (cmd). Je veux me retrouver avec une variable qui ne contient que “123”. Y a-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'elle est intégrée à un système Windows typique (Vista/2008).

Réponses (4)

39
39
39
2011-01-04 02:58:22 +0000

Utilisez la syntaxe de la sous-chaîne :

C:\Users\John>set string=Abc_123

C:\Users\John>echo %string%
Abc_123

C:\Users\John>echo %string:~4,3%
123
7
7
7
2018-07-02 15:51:27 +0000

Si vous voulez juste tout ce qui suit le trait de soulignement (et que vous ne connaissez pas nécessairement la longueur de la chaîne ou l'endroit où se trouve le trait de soulignement, mais que vous pouvez compter sur le fait qu'il n'y ait qu'un seul trait de soulignement), essayez :

for /f "tokens=2 delims=_" %%a in ("%STRING%") do (
  set AFTER_UNDERSCORE=%%a
)

En gros, votre chaîne sera divisée en jetons en utilisant le trait de soulignement comme délimiteur (delims=_). Seul le deuxième (tokens=2) sera passé (comme variable %%a) à la boucle for. La boucle ne sera exécutée qu'une seule fois, car il s'agit dans ce cas d'une seule chaîne de caractères.

Si vous voulez sauvegarder les éléments avant et après le soulignement, essayez :

for /f "tokens=1,2 delims=_" %%a in ("%STRING%") do (
  set BEFORE_UNDERSCORE=%%a
  set AFTER_UNDERSCORE=%%b
)

Notez que %%a est la variable pour le premier élément du partage ; %%b est la variable pour le deuxième élément du partage.

3
3
3
2011-01-04 03:14:44 +0000

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 en arriver là - vous pouvez utiliser le Windows PowerShell . Il 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 d'autres aussi.

1
1
1
2019-10-29 13:32:58 +0000
set var1=Abc_123
set var2=%var1:*_=%
echo %var2%