
프로덕션을 위해 하나의 가상 머신을 여러 머신으로 복제해야 하는 문제가 있습니다. 머신에는 변수로 할당되는 이름이 있으며 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
FOR, IF 및 WHILE을 사용해 보았지만 작동시키는 방법을 알 수 없습니다.
FOR의 모습은 다음과 같았습니다.
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
답변1
검토만 하시면 될 것 같습니다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
답변2
도망치다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
다음 소스(FOR)그리고세트