我需要帮助处理我正在处理的这个批处理文件,
基本上每次它完成一项任务时,它应该加上变量%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 +
这可能吗?如果你能帮助我,谢谢!
答案 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]%
,并将其转换为svnX
内a.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%%%
这只是为变量访问添加了另一层间接,就像延迟扩展一样,但不需要所说的功能。