@echo off
rem@by_shengli
color 0a
for /f "skip=3 tokens=4" %%i in ('sc query "VMAuthdService"') do set "str=%%i" &goto :next
:next
rem 截取到的字符串
rem echo %str%
if /i "%str%" =="RUNNING" (
echo 服务VMware Authorization Service正在运行
) else (
echo 服务VMware Authorization Service已停止
)
for /f "skip=3 tokens=4" %%i in ('sc query "VMnetDHCP"') do set "str=%%i" &goto :next
:next
rem 截取到的字符串
rem echo %str%
if /i "%str%" == "RUNNING" (
echo 服务VMware DHCP Service正在运行
) else (
echo 服务VMware DHCP Service已停止
)
for /f "skip=3 tokens=4" %%i in ('sc query "VMware NAT Service"') do set "str=%%i" &goto :next
:next
rem 截取到的字符串
rem echo %str%
if /i "%str%" == "RUNNING" (
echo 服务VMware NAT Service正在运行
) else (
echo 服务VMware NAT Service已停止
)
for /f "skip=3 tokens=4" %%i in ('sc query "VMUSBArbService"') do set "str=%%i" &goto :next
:next
rem 截取到的字符串
rem echo %str%
if /i "%str%" == "RUNNING" (
echo 服务VMUSBArbService正在运行
) else (
echo 服务VMUSBArbService已停止
)
for /f "skip=3 tokens=4" %%i in ('sc query "VMwareHostd"') do set "str=%%i" &goto :next
:next
rem 截取到的字符串
rem echo %str%
if /i "%str%" == "RUNNING" (
echo 服务VMwareHostd正在运行
) else (
echo 服务VMwareHostd已停止
)
pause
echo =-=-=-=-= 请用管理员权限运行=-=-=-=-=
echo.
GOTO :MEMU
:MEMU
echo.=-=-=-=-=VMware 手工启动批处理=-=-=-=-=
rem echo 1:启用VM虚拟机服务及虚拟网络连接
rem echo 2: 禁用VM虚拟机服务及虚拟网络连接
rem choice /c:12 /m "请根据选项选择..."
rem 使用时应该加/c:参数,c: 后应写提示可输入的字符或数字,之间无空格。冒号是可选项。
rem 使用时加也可选择加/m:参数,m:后应写提示说明语。
rem if errorlevel 1 goto :one
rem if errorlevel 2 goto :two
echo. 1 启动VMware各项服务
echo. 2 关闭VMware各项服务
echo. 3 exit
echo 请输入选择项目的序号:
set /p ID=
if "%id%"=="1" goto one
if "%id%"=="2" goto two
if "%id%"=="3" echo 按任意键退出...
pause>nul & exit
PAUSE
:one
echo 正在启用服务...
net start "VMAuthdService"
net start "VMnetDHCP"
net start "VMware NAT Service"
net start "VMUSBArbService"
net start "VMwareHostd"
echo 正在启用网络连接...
netsh interface set interface "VMware Network Adapter VMnet1" enable
netsh interface set interface "VMware Network Adapter VMnet8" enable
echo 网络连接VMware Network Adapter VMnet1、VMware Network Adapter VMnet8启动成功
echo.
goto :MEMU
:two
rem net 用于打开没有被禁的服务 net start 服务名
rem sc可以打开被禁的服务 sc config 服务名 start= demand //手动
rem sc condig 服务名 start= auto //自动
rem sc config 服务名 start= disabled //禁用
rem sc start 服务名
rem sc stop 服务名
echo 正在关闭服务...
net stop "VMware Workstation Server"
net stop "VMAuthdService"
net stop "VMnetDHCP"
net stop "VMware NAT Service"
net stop "VMUSBArbService"
net stop "VMwareHostd"
echo 正在禁用网络连接...
netsh interface set interface "VMware Network Adapter VMnet1" disable
netsh interface set interface "VMware Network Adapter VMnet8" disable
echo 网络连接VMware Network Adapter VMnet1、VMware Network Adapter VMnet8禁用成功
echo.
goto :MEMU
参数不要靠在一起,会报错,之间要留空格
pause 就是暂停命令,执行时会在命令行窗口显示“请按任意键继续. . .”并等待你按键。pause > nul的作用是同样的,区别是不显示“请按任意键继续. . .”这些字,nul相当于空文件,把这些文字隐去了。
choice /c 后写选项(字符或者数字),之间不要加空格
3 choice /c:1234 /m:"please select"
4 if %errorlevel%==4 goto end
5 if %errorlevel%==3 goto three
6 if %errorlevel%==2 goto two
7 if %errorlevel%==1 goto one
if /I "%str%" == "RUNNING"
在cmd窗口中:for %I in (command1) do command2
在批处理文件中:for %%I in (command1) do command2
for /f "delims= skip= tokens= 1,3-5,*" %%i in (test.txt) do echo %%I %%j %%k
delims 是分隔符号,语句默认以空格键或跳格键作为分隔符号
skip 跳过几个
tokens 是选择 默认选择第一个
*代表的是剩下的成一个部分
忽略以指定字符打头的行:eol=
for /f %%i in (……) do (……) 语句有好几种变形语句,不同之处在于第一个括号里的内容:有的是用单引
号括起来,有的是用双引号包住,有的不用任何符号包裹,具体格式为:
引用:
1、for /f %%i in (文件名) do (……)
2、for /f %%i in ('命令语句') do (……)
3、for /f %%i in ("字符串") do (……)
这个时候,我们会吃惊地发现,区区一条for语句,竟然有多达6种句型:
1、for /f %%i in (文件名) do (……)
2、for /f %%i in ('命令语句') do (……)
3、for /f %%i in ("字符串") do (……)
4、for /f "usebackq" %%i in ("文件名") do (……)
5、for /f "usebackq" %%i in (`命令语句`) do (……)
6、for /f "usebackq" %%i in ('字符串') do (……)
至于 for /f 为什么要增加usebacq参数,我只为第4条语句找到了合理的解释:为了兼容文件名中所带的空格或&。
它在第5、6条语句中为什么还有存在的必要,我也不是很明白,这有待于各位去慢慢发现。