У меня есть проблема, где я должен клонировать одну виртуальную машину в несколько машин для производства. Машины имеют имена, который присвоен переменными, и rdp порт также присвоен переменной. Обе переменные увеличены на 1 в конце сценария. Проблема, которую я имею, состоит в том, что я не могу выяснить, как циклично выполнить создать машину и увеличить код значения переменной, пока %M значение % не в определенном числе.
Вот мой текущий код:
SET VBoxManage="C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
SET M=1
SET P=25553
if %%M < 4 (
%VBoxManage% clonevm Win2012 --mode all --name M%M% --register
%VBoxManage% modifyvm M%M% --vrde on --vrdeauthtype null --vrdemulticon on --vrdeport %P%
SET /A M=%M%+1
SET /A P=%P%+1
ECHO Done
ECHO %M%
ECHO %P%
)
ECHO All cloning finished.
pause
Я попробовал ПОСКОЛЬКУ, ЕСЛИ и В ТО ВРЕМЯ КАК, но я не могу выяснить, как заставить это работать.
Как ДЛЯ действительно был похож:
SET VBoxManage="C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
SET M=1
SET P=25553
FOR /L (if %%M IN (1,1,5)
(
%VBoxManage% clonevm Win2012 --mode all --name M%M% --register
%VBoxManage% modifyvm M%M% --vrde on --vrdeauthtype null --vrdemulticon on --vrdeport %P%
SET /A M=%M%+1
SET /A P=%P%+1
ECHO Done
ECHO %M%
ECHO %P%
)
ECHO All cloning finished.
pause
Думаю, вам просто нужно немного просмотреть FOR /?
справку . Вы смешали пару разных вещей, но они не работают. Интерпретатор cmd
ограничен по сравнению с другими средами сценариев, с которыми вы, возможно, знакомы.
Я думаю, все, что вы спрашиваете, это: «Как использовать FOR
] в пакетном файле для подсчета от 1 до 5 с шагом 1? " И это достаточно просто:
FOR /L %%M IN (1, 1, 5) DO (
ECHO %%M
)
Вторая часть вашего вопроса касается увеличения другой переменной в цикле FOR
. Для этого вам нужно найти SETLOCAL EnableDelayedExpansion
. Вот пример использования предоставленного вами сценария.
@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET VBoxManage="C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
SET P=25553
FOR /L %%M IN (1, 1, 5) DO (
%VBoxManage% clonevm Win2012 --mode all --name M%%M --register
%VBoxManage% modifyvm M%%M --vrde on --vrdeauthtype null --vrdemulticon on --vrdeport !P!
SET /A P=P + 1
ECHO Done
ECHO %%M
ECHO !P!
)
ECHO All cloning finished.
PAUSE
Чтобы избежать EnableDelayedExpansion , вы можете попробовать следующий подход с вызовом процедуры:
@ECHO OFF >NUL
setlocal
SET "VBoxManage=C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
SET /A "P=25553"
FOR /L %%M IN (1,1,5) Do call :treat %%M
ECHO All cloning finished.
pause
endlocal
goto :eof
:treat
rem next two operational commands are ECHO-ed for debugging purposes
echo "%VBoxManage%" clonevm Win2012 --mode all --name M%~1 --register
echo "%VBoxManage%" modifyvm M%~1 --vrde on --vrdeauthtype null --vrdemulticon on --vrdeport %P%
ECHO Done M=%~1 P=%P%
SET /A "P+=1"
goto :eof