2010-06-08 61 views
2

我需要我正在此批處理文件幫助,批號變量二傳手

基本上每次它一個任務它應該加上一個變量%數量%的正常工作和所有的,然後再重複以上完成不同的任務。

這是它使用重複碼

我需要設置的方式基本上是:

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

相反,我使用:

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%) 

,我真的需要縮短因爲這個數字上升到20+

這可能嗎?如果你能幫助我,謝謝!

回答

0

使用臨時批處理文件。這可能不是優雅,但它的工作原理:

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 

但要注意:它可以變得相當困難,找出在這裏使用的%的數量和順序。在該示例中,%%svn%number%%%轉換爲%svn[actual value X of variable number]%,並將其轉換爲a.bat內部的實際值svnX

因此您實際的代碼應該是這樣的:

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 

這也可以作爲一個子程序:

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

它的工作原理。謝謝schnaader。 – eyefinity 2010-06-08 17:24:29

0

使用延遲擴展:

setlocal enableextensions enabledelayedexpansion 

然後你就可以像這樣做:

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

隨着%number%在解析時被評估,您將擁有!svn1!等,在運行該命令之前對其進行評估(!代替%以獲得延遲擴展)。

你也可以使用一個未公開招(但要注意,這可能自發地停止工作,因爲它沒有證件,因此不支持):

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

這只是增加了間接的另一層的變量訪問,就像延遲擴展但不需要該功能。