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安装目录下
posted @ 2025-04-19 13:23  基础狗  阅读(77)  评论(0)    收藏  举报