
1 台の仮想マシンを複数のマシンに複製して実稼働する必要があるという問題があります。マシンには変数によって割り当てられた名前があり、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
通訳は限定皆さんがよくご存知の他のスクリプト環境と比較すると、
あなたが尋ねているのは、「バッチ ファイルで 1 から 5 まで 1 ずつカウントするにはどうすればよいかFOR
」ということだと思います。これは非常に簡単です。
FOR /L %%M IN (1, 1, 5) DO (
ECHO %%M
)
質問の2番目の部分は、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
逃げる遅延拡張を有効にするプロシージャ呼び出しを使用して次のアプローチを試すことができます。
@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