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


你自己执行到这句代码遇到什么报错信息了?

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# Batcher


    tasklist /FI "IMAGENAME eq vmware-vmx.exe" 2>NUL | find /I /N "vmware-vmx.exe">C:\Users\admin\Desktop\vmware_process.txt,请问我这句代码 ,有什么语法错误问题

TOP

回复 5# Batcher


    感谢,回复很及时,在群里看到公告,很点赞。虽然和这个无关,但还想在问一下,还有没有其他技术论坛,

TOP

回复 4# GNGW


因为你代码里面有很多语法错误,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA

例如:
1

评分人数

    • GNGW: 感谢耐心技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


    我不明白,就算if not exist "%OutFile%" 判断中的 pause 不停顿也就算了,为什么这个判断之下的pause 也不生效

TOP

回复 2# Batcher


    需求是,vmrun stop 停止了一个虚拟机,需要反复检查此虚拟机进程是否存在,如果不存在,就退出VMware 应用程序,然后等待10秒后关机。如果虚拟机进程存在,则反复关闭虚拟机进程,因为是用的vmrun stop soft ,软关机,所以,虚拟机进程会关闭一段时间。
(简短需要关闭一个虚拟机,并关闭VMware,并关机)
下面是我的代码,全码----------------------------------------------------------
set /a retry_script_count=0
set /a retry_count=0
set /a process_count = 0
set /a vmware_process_txt_count = 0
set /a vmrun_count = 0
:command_loop
vmrun stop "D:\VMware\VMLib\hengFengBankClone\hengFengBankOne.vmx" soft
:check_process
tasklist /FI "IMAGENAME eq vmware-vmx.exe" 2>NUL | find /I /N "vmware-vmx.exe">C:\Users\admin\Desktop\vmware_process.txt
IF NOT EXIST "C:\Users\admin\Desktop\vmware_process.txt"(
pause
        IF %vmware_process_txt_count% EQU 3(
                set /a vmrun_count+=1
                goto:command_loop
        )
        IF %vmrun_count%         EQU 3(
                exit /b 1
        )
        set /a vmware_process_txt_count = 0
        goto:check_process
)
pause
if %~z1 EQU 0 (
        del "C:\Users\admin\Desktop\vmware_process.txt"
        taskkill /f /t /im "vmware.exe"
        timeout /t 10
        shutdown /s /t 0
)
del "C:\Users\admin\Desktop\vmware_process.txt"
echo "虚拟机仍在运行中"
IF %retry_script_count% EQU 3(
        exit /b 1
)
IF %retry_count% NEQ 5 (
        set /a retry_count+=1
        timeout /t 30
        goto:check_process
)
echo "连续检查5次,虚拟机仍没关闭,请等待程序再次尝试关闭虚拟机"
timeout /t 30
set /a retry_count=0
set /a retry_script_count+=1
setlocal
        set /a new_retry_script_count=%retry_script_count%+1
        echo "第%new_retry_script_count%次尝试关闭虚拟机"
        timeout /t 10
endlocal
goto:command_loop

TOP

回复 1# GNGW



从语法层面来说,这样可以停顿:
  1. @echo off
  2. set "retry_script_count=0"
  3. set "retry_count=0"
  4. set "process_count=0"
  5. set "vmware_process_txt_count=0"
  6. set "vmrun_count=0"
  7. set "OutFile=C:\Users\admin\Desktop\vmware_process.txt"
  8. :command_loop
  9. vmrun stop "D:\VMware\VMLib\hengFengBankClone\hengFengBankOne.vmx" soft
  10. :check_process
  11. tasklist /fi "imagename eq vmware-vmx.exe" 2>nul | find /i /n "vmware-vmx.exe" >"%OutFile%"
  12. if not exist "%OutFile%" (
  13.     pause
  14.     if %vmware_process_txt_count% equ 3 (
  15.         set /a vmrun_count+=1
  16.         goto :command_loop
  17.     )
  18.     if %vmrun_count% equ 3 (
  19.         exit /b 1
  20.     )
  21.     set /a vmware_process_txt_count=0
  22.     goto :check_process
  23. )
  24. pause
复制代码
但是你这个代码逻辑和你想实现的效果是有很大差距的,建议详细描述一下实际需求,我继续帮你修改代码逻辑。

首先第一个逻辑问题是,find命令即使查不到关键字,它仍然会创建一个空文件,所以下面的 if not exist 判断永远不会生效。
2

评分人数

    • GNGW: 乐于助人,感谢教学技术 + 1
    • 77七: 感谢分享技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表