2010-06-08 10 views
2

J'ai besoin d'aide avec ce fichier batch je travaille,Numéro de lot setter variables

Fondamentalement, chaque fois qu'il fait une tâche, il devrait plus le nombre variable%% en un qui fonctionne très bien et tout, puis répéter encore faire une tâche différente jusqu'à ce qu'il soit terminé.

C'est le code qu'il utilise pour répéter

je besoin d'un moyen de paramètres essentiellement:

set svn=%svn%%number% 
set svnlink=%svnlink%%number% 
set svnfolder=%svnfolder%%number% 

Au lieu de cela, je me sers:

if %number%==1 (
set svn=%svn1% 
set svnlink=%svnlink1% 
set svnfolder=%svnfolder1%) 
if %number%==2 (
set svn=%svn2% 
set svnlink=%svnlink2% 
set svnfolder=%svnfolder2%) 
if %number%==3 (
set svn=%svn3% 
set svnlink=%svnlink3% 
set svnfolder=%svnfolder3%) 

que je vraiment besoin de raccourcir comme cela va au numéro 20+

Est-ce possible? Si vous pouviez m'aider, merci!

Répondre

0

Utilisez un fichier de traitement par lots temporaire. Cela pourrait ne pas être élégant, mais il fonctionne:

set svn1=First text 
set svn2=Second text 

REM This echos the first text 
set number=1 
echo echo %%svn%number%%% > a.bat 
call a 

REM This echos the second text 
set number=2 
echo echo %%svn%number%%% > a.bat 
call a 

if exist a.bat del a.bat 

Mais méfiez-vous: Il peut être assez difficile de connaître le nombre et l'ordre des % « s à utiliser ici. Dans l'exemple, %%svn%number%%% est transformé en %svn[actual value X of variable number]% et ceci est transformé à la valeur réelle de svnX à l'intérieur de a.bat.

donc votre code actuel devrait ressembler à ceci:

REM Note that number has to be set here already! 
echo set svn=%%svn%number%%% > a.bat 
echo set svnlink=%%svnlink%number%%% >> a.bat 
echo set svnfolder=%%svnfolder%number%%% >> a.bat 
call a.bat 

Cela peut aussi être utilisé comme un sous-programme:

set number=1 
set returnmark=mark1 
goto setvars 
:mark1 

set number=45 
set returnmark=mark2 
goto setvars 
:mark2 

goto end 

:setvars 
echo set svn=%%svn%number%%% > a.bat 
echo set svnlink=%%svnlink%number%%% >> a.bat 
echo set svnfolder=%%svnfolder%number%%% >> a.bat 
call a.bat 
goto %returnmark% 

:end 
+0

Cela fonctionne. Merci schnaader. – eyefinity

0

Utilisation retardé l'expansion:

setlocal enableextensions enabledelayedexpansion 

Ensuite, vous pouvez faites comme ceci:

set svn=!svn%number%! 
set svnlink=!svnlink%number%! 
set svnfolder=!svnfolder%number%! 

Avec %number% en cours d'évaluation sur l'analyse, vous avez alors !svn1!, etc. qui sont évalués juste avant d'exécuter la commande (! remplaçant le % pour l'expansion retardée).

Vous pouvez également utiliser une astuce non documentée (mais méfiez-vous qu'il pourrait arrêter spontanément travailler car il est en situation irrégulière et donc non pris en charge):

call set svn=%%svn%number%%% 
call set svnlink=%%svnlink%number%%% 
call set svnfolder=%%svnfolder%number%%% 

Cela ajoute simplement une autre couche d'indirection à l'accès à une variable, comme retardée l'expansion, mais n'a pas besoin de cette fonctionnalité.