批号变量设定器

时间:2010-06-08 16:44:48

标签: windows batch-file

我需要帮助处理我正在处理的这个批处理文件,

基本上每次它完成一项任务时,它应该加上变量%number%by一个正常工作然后再重复执行一个不同的任务直到它完成。

这是用于重复

的代码

我基本上需要一种设置方式:

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 +

这可能吗?如果你能帮助我,谢谢!

2 个答案:

答案 0 :(得分: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]%,并将其转换为svnXa.bat的实际值。

所以你的实际代码应该是这样的:

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

答案 1 :(得分: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%%%

这只是为变量访问添加了另一层间接,就像延迟扩展一样,但不需要所说的功能。