bat脚本一键启动多台虚拟机(待重写)
@echo off
::==============================================================定义区=====================================================================
::VMware Workstation Pro安装位置
set SoftwarePath=""
::虚拟机安装位置
set VirtualRoot=G:\Virtual Machines\HA\
set MachineNum=3
set MachineName1=hdp-node-1
set MachineName2=hdp-node-2
set MachineName3=hdp-node-3
::==============================================================执行区=====================================================================
::===============================================================================================进入VMware Workstation Pro安装目录下
setlocal enabledelayedexpansion
rem 设置要查找的注册表项路径
set "regPath=HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store"
rem 使用 reg query 命令获取该路径下的项
for /f "tokens=*" %%i in ('reg query "%regPath%"') do (
echo %%i | findstr /i "vmware.exe" >nul
if not errorlevel 1 (
echo %%i
:: 定义原始字符串
set "full_str=%%i"
:: 定义要查找的子字符串
set "search_str=vmware.exe"
:: 初始化变量
set "found_pos=0"
set "str_len=0"
set "search_len=0"
:: 计算原始字符串的长度
:get_str_len
if "!full_str:~%str_len%,1!" neq "" (
set /a str_len+=1
goto :get_str_len
)
:: 计算子字符串的长度
:get_search_len
if "!search_str:~%search_len%,1!" neq "" (
set /a search_len+=1
goto :get_search_len
)
:: 主查找逻辑
for /l %%i in (0,1,!str_len!) do (
set "sub_str=!full_str:~%%i,%search_len%!"
if /i "!sub_str!"=="%search_str%" (
set /a found_pos=%%i+1
goto :found
)
)
:: 未找到的情况
echo 未找到子字符串 "%search_str%"
goto :end
:: 找到的情况
:found
rem echo 子字符串 "%search_str%" 在字符串中的位置是:%found_pos%
::提取路径
set /a found_pos = %found_pos%-1
set "sub_string=!full_str:~0,%found_pos%!"
rem echo %sub_string%
endlocal & set SoftwarePath=%sub_string%
)
)
cd /d "%SoftwarePath%"
rem dir
::===============================================================================================启动虚拟机
::启动虚拟机
if "%1" == "start" goto startvm
if "%1" == "stop" goto stopvm
:startvm
setlocal enabledelayedexpansion
for /l %%i in (1,1,%MachineNum%) do (
set MachineNames=!MachineName%%i!
set MachinePaths="%VirtualRoot%\!MachineNames!\!MachineNames!.vmx"
echo "正在启动!MachineNames!"
vmrun start !MachinePaths! nogui
)
endlocal
echo "——————————————虚拟机启动完毕————————————————"
vmrun list
pause
exit
:stopvm
set mode=soft
if "%2" == "hard" (
set mode=hard
)
setlocal enabledelayedexpansion
for /l %%i in (1,1,%MachineNum%) do (
set MachineNames=!MachineName%%i!
set MachinePaths="%VirtualRoot%!MachineNames!\!MachineNames!.vmx"
echo "正在启动!MachineNames!"
vmrun stop !MachinePaths! %mode%
)
endlocal
echo "——————————————虚拟机已关闭————————————————"
vmrun list
exit
:end
if "!found!"=="0" (
echo No matching entries found.
)
下载链接:
脚本(密码:cw56)
ps:
1.避免中文乱码的方式
方法一:echo提示和中文注释全部改写为英文
方法二:文件转换为ASNI编码
方法三:文件转换为UTF-8编码,并在@echo off后添加chcp 65001
2.默认双击是启动,进入cmd可以传入参数,start是启动,stop是关闭,stop默认是soft模式,即正常关机,可以传入第二个参数hard--强制关机。示例:start-haoop.bat start,start-hadoop.bat stop, start-hadoop.bat stop soft,start-hadoop.bat hard
3.可以删除下述这一块内的代码,将脚本复制到VMware Workstation Pro安装目录下执行,
::===============================================================================================进入VMware Workstation Pro安装目录下

浙公网安备 33010602011771号