Fichier de commandes Windows – fractionnement d’une chaîne pour définir des variables

J’ai l’impression de tourner en rond avec les options de boucle FOR.

J’essaie de prendre une chaîne (sortie d’une commande) et de la séparer par des virgules, puis d’utiliser chaque valeur pour définir, par exemple

Chaîne: USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234

Je veux donc séparer les virgules et utiliser littéralement cette variable dans SET. Je ne sais pas combien de variables il y aura.

J’ai essayé des choses comme:

 FOR %%L IN (%MYSTRING%) DO ECHO %%L 

mais qui se divise sur le signe égal aussi alors je me retrouve avec

 USER Andy IP 1.2.3.4 

etc

Je veux juste être capable de faire ce qui suit afin que je puisse SET USER=Andy etc, quelque chose comme:

 FOR %%L IN (%MYSTRING%) DO SET %%L 

Quelle option ou quels drapeaux me manque-t-il?

    Les délimiteurs par défaut pour les éléments de la commande plain FOR (option no /F ) sont les espaces, les tabulations, les virgules, les points-virgules et les signes égaux. :

     @echo off set MYSTRING=USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234 :nextVar for /F "tokens=1* delims=," %%a in ("%MYSTRING%") do ( set %%a set MYSTRING=%%b ) if defined MYSTRING goto nextVar echo USER=%USER%, IP=%IP%, HOSTNAME=%HOSTNAME%, PORT=%PORT% 

    Une autre façon de résoudre ce problème consiste d’abord à prendre le nom de la variable puis à exécuter l’affectation pour chaque paire de valeurs dans une commande FOR régulière:

     setlocal EnableDelayedExpansion set varName= for %%a in (%MYSTRING%) do ( if not defined varName ( set varName=%%a ) else ( set !varName!=%%a set varName= ) ) echo USER=%USER%, IP=%IP%, HOSTNAME=%HOSTNAME%, PORT=%PORT% 

    Si votre entrée est quelque chose comme HOSTNAME: PORT et que vous devez diviser en variables séparées, vous pouvez l’utiliser

     @echo off set SERVER_HOST_PORT=10.0.2.15:8080 set SERVER_HOST_PORT=%SERVER_HOST_PORT::=,% for /F "tokens=1* delims=," %%a in ("%SERVER_HOST_PORT%") do ( set SERVER_HOST=%%a set SERVER_PORT=%%b ) echo SERVER_HOST=%SERVER_HOST% echo SERVER_PORT=%SERVER_PORT%