2010-01-18 2 views
0

J'ai besoin de générer aléatoirement un certain nombre de valeurs dans un fichier de traitement par lots qui partagent une certaine plage et les concaténent ensemble en les séparant par des espaces. Tout fonctionne sauf pour concaténer les nombres séparés par des espaces. Le problème problématique spécifique est la concaténation avec les nombres avec des espaces, comment puis-je m'y prendre?Concaténation de nombres séparés par des espaces dans un fichier de commandes

La partie relevent suit:

::Assume %minA%, %maxA% and %randB% are defined correctly. 
set /a randA=(%random% %% %maxA%) + %minA% 
set agent_counter=0 
:start_agent_loop 
if %agent_counter% equ %randA% goto end 
set /a randApos=(%random% %% %randB%) + 1 
::supposedly (if I recall), simply having a space between %agent_starts% 
::and %randApos% should do the trick, this doesn't seem to be the case. 
set agent_starts = %agent_starts% %randApos% 
set /a agent_counter +=1 
goto start_agent_loop 

:end 
echo -A %agent_starts% 

Idéalement, cela devrait imprimer quelque chose comme ...

C:\Path\>genparams.bat 
-A 2 4 5 

Actuellement je reçois

-A 

Répondre

2

The following website (SS64.com) est une valeur inestimable pour référence script batch . Il existe d'excellentes pages sur SET, IF, vous l'appelez.

La commande SET n'est pas très tolérante avec des espaces supplémentaires. En outre, set/a vérifiera toutes les chaînes pour voir si elles sont une variable, donc je ne pense pas que les% soient requis autour de maxA et minA. J'ai supposé% aléatoire% était une variable de fichier de commandes spéciales qui retourne un nombre aléatoire, donc je ne les ai pas retirés de cela. (Bien que vous pourriez être en mesure de)

Change:

set /a randA=(%random% %% %maxA%) + %minA% 

Pour:

set /a randA=(%random%%%maxA)+minA 

Et le changement:

set agent_starts = %agent_starts% %randApos% 

Pour:

set agent_starts=%agent_starts% %randApos% 

En faisant cela (et en réglant un minA = 1, maxA = 10, randB = 5), j'ai obtenu ceci lors de ma première descente: "-A 3 4 3".

+0

Merci pour votre réponse rapide! En effet, tout ce que je devais faire était de supprimer les espaces de sorte qu'ils ressemblent à votre quatrième ligne de script et cela a fonctionné comme un charme! – Geoff

+0

En outre, j'ai modifié le fichier avec votre première recommandation (en supprimant les signes% superflus) et il a continué à fonctionner, mais maintenant il semble plus propre. :) Comme vous l'avez deviné, j'ai dû les garder pour% aléatoire%. – Geoff

+0

Sweet - heureux d'aider. Je traitais un problème de type "spaces" séparé dans un script batch aujourd'hui, alors j'ai ressenti votre douleur :) –

Questions connexes