[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理按逻辑关闭指定的虚拟机,搞不来,求大神赐教.

本帖最后由 iii888iii 于 2023-1-12 23:33 编辑

现在有下面bat命令行控制VMware虚拟机关闭指定虚拟机的代码.
这里有个逻辑写不出,请大神帮忙.

情况是这样的.
1,首先运行:  
d:
cd D:\VMware\
vmrun list
可以得到所有开机的虚拟机的列表名称.
得到结论(举例):
D:\vos\1\1.vmx
D:\vos\2\2.vmx
D:\vos\3\3.vmx
D:\vos\4\4.vmx
D:\vos\5\5.vmx
D:\vos\14\14.vmx
D:\vos\15\15.vmx
2, 逻辑: 如果不是整组的开机虚拟机,则关闭.

例如:
D:\vos\14\14.vmx
D:\vos\15\15.vmx

如果,不是整组虚拟机存在.,那么,
关机:
D:\vos\14\14.vmx
D:\vos\15\15.vmx

关机代码:
vmrun stop "D:\vos\14\14.vmx" hard
vmrun stop "D:\vos\15\15.vmx" hard
组概念:
D:\vos\1\1.vmx
D:\vos\2\2.vmx
D:\vos\3\3.vmx
D:\vos\4\4.vmx
D:\vos\5\5.vmx   为整组

D:\vos\6\6.vmx
D:\vos\7\7.vmx
D:\vos\8\8.vmx
D:\vos\9\9.vmx
D:\vos\10\10.vmx  为整组

其余类推,虚拟机最大编号120,按顺序,每5个编号连续的,为一组.


d:
cd D:\VMware\
vmrun list
关机代码:
vmrun stop "D:\vos\2\2.vmx" hard
vmrun stop "D:\vos\3\3.vmx" hard


当总共10个编号的虚拟机开机,才会运行这个代码,然后,如果中间有一个虚拟机需要关机,那么,后面的虚拟机开起来,就肯定也不是整组的,但是这组是不关机的(最大编号的5个不关机)

1,21,22,23,24,25,26,27,28,29

总共开启了10个,然后就运行这个代码,这个时候   1,不是整组,

26,27,28,29,也不是整,组,   但是这个不是整组,是应为1,不是整组,导致的,所以,最大序号的5个虚拟机不关机.

只,关闭,1,这个零散的虚拟机.这个逻辑才可以.
另外就是需要操作的虚拟机,限制编号必须为1-120的数字.  因为有2不是编号的虚拟机一直挂机的.

回复 2# 77七




    感谢不尽, 我测试一下.能写这样就不错了.

TOP

回复 2# 77七


    Find
参数不正确

有点问题..然后,有关闭虚拟机的动作,但是关闭失败.

TOP

C:\Users\Administrator\Desktop>rem @echo off

C:\Users\Administrator\Desktop>setlocal enabledelayedexpansion

C:\Users\Administrator\Desktop>cd /d "D:\VMware\"

D:\vmware>for /F "tokens=4 delims=\." %a in ('vmrun list | find vmx') do (set _"
%a"=ture )
FIND: 参数格式不正确

D:\vmware>for /L %i in (1 120) do (
set num=%i
set /a m=1
set /a num1=num,num2=num+1,num3=num+2,num4=num+3,num5=num+4
for %b in (!num1! !num2! !num3! !num4! !num5!) do (if not defined _"%b" (if !m!
EQU 1 (
set /a m=2
for %c in (!num1! !num2! !num3! !num4! !num5!) do (if defined _"%c" (
vmrun stop "D:\vos\%c\%c.vmx" hard
echo 关闭了虚拟机,编号%c
) )
) ) )
)

D:\vmware>endlocal

C:\Users\Administrator\Desktop>pause
请按任意键继续. . .

TOP

成功了,关机后面,增加延时5秒,这个动作需要延时才正常
谢谢你,祝生活顺利.

TOP

回复 7# 77七


    可能有点瑕疵,

我看这句,for %%c in (!num1! !num2! !num3! !num4! !num5!) do (

是没问题.

但是,6,7,8,9,10,这个也算是一组

运行测试,老是提示关闭了6.vmx

TOP

本帖最后由 iii888iii 于 2023-1-12 21:45 编辑

列表导不出来,
其实导出来也就是必须要操作的虚拟机:1-120,共120个虚拟机
虚拟机名称就是这个编号.

实际挂机发现,会出另外一个极端问题.就是,最大值的5个虚拟机,不执行.
当总共10个编号的虚拟机开机,才会运行这个代码,然后,如果中间有一个虚拟机需要关机,那么,后面的虚拟机开起来,就肯定也不是整组的,但是这组是不关机的(最大编号的5个不关机)

1,21,22,23,24,25,26,27,28,29

总共开启了10个,然后就运行这个代码,这个时候   1,不是整组,

26,27,28,29,也不是整,组,   但是这个不是整组,是应为1,不是整组,导致的,所以,最大序号的5个虚拟机不关机.

只,关闭,1,这个零散的虚拟机.这个逻辑才可以.
另外就是需要操作的虚拟机,限制编号必须为1-120的数字.  因为有2不是编号的虚拟机一直挂机的.

TOP

回复 13# 77七


   很抱歉,当时没考虑到,并非有意为之

TOP

01,   非整组是,11,12,14,  但是是最大序号的5个虚拟机,不关机.
02.   非整组是 1,3,4,5,  和11, 12    其中,1,3,4,5,不是最大序号的5个虚拟机.关闭.
03.   3,4,5, 和 11,13,14,15,  和 21  非整组3组.   3.4.5  11.13.14.15.关机  21,包含在最大序号5个之中.不操作.

麻烦您了

TOP

返回列表