Установка переменной номера партии - PullRequest
2 голосов
/ 08 июня 2010

Мне нужна помощь с этим командным файлом, над которым я работаю,

Обычно каждый раз, когда он выполняет задачу, он должен добавить переменную% number% на единицу, которая работает нормально и все, и затем повторяться снова, выполняя другую задачу до ее завершения.

Это код, который он использует для повторения

Мне нужен способ настройки в основном:

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 голосов
/ 11 июня 2010

Использовать отложенное расширение:

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

Это просто добавляет еще один уровень косвенности к доступу к переменной, точно так же как отложенное расширение, но не нуждается в указанной функции.

0 голосов
/ 08 июня 2010

Использовать временный пакетный файл. Это может быть не элегантно, но работает:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...