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


     学习资料一定会放在这个论坛的,因为我也在这个论坛受益。我不知道你是不是这个网站的最高管理员,还是说有其他更高管理员与你并存,实际上我并不知道这个网站的管理组解构。但关于有多少技术论坛,如果有的话,或者你愿意分享你常逛的技术型论坛,如果你不是最高管理者,或者还有其他管理者,你可以帮忙问问你申请的人吗?如果不知道 ,可以逐级上问。期待你的回复。因为现在互联网上,像这种存活且高质量的论坛已经不多见了,大部分论坛都随着发展到现在死掉了。要么就是尸体论坛,论坛还在已经没人使用了。好几年前的帖子还在上面,只是有一个存档的作用。所以这是我殷切你能分享和帮我询问技术论坛的原因。我会很感谢。

TOP

回复 21# GNGW


1、errorlevel的返回值非常复杂,不可能用一两句话概括完整。如果一定要概括的话:
大部分命令,执行成功的返回值是0。

批处理各命令错误返回值errorlevel一览
http://bbs.bathome.net/thread-3603-1-1.html

errorlevel的范围是[-2147483648,2147483647]
https://stackoverflow.com/questi ... egative-error-codes

不同的命令设置errorlevel值是不一样的
https://stackoverflow.com/questi ... s/34987886#34987886

[讨论]对批处理中errorlevel的几点猜测
http://bbs.bathome.net/thread-14277-1-1.html

2、VIP http://bbs.bathome.net/thread-67716-1-1.html
管理组 http://bbs.bathome.net/thread-77-1-1.html
荣誉组一般只主动授予,不接受申请。

3、如果你有一天找到了更好的资料,请让我也学习一下。提前感谢!

4、我手上只有这一个网站。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 20# Batcher

tasklist /fi "imagename eq vmware-vmx.exe" 2>nul | find /i /n "vmware-vmx.exe" >nul
if errorlevel 1 (
    echo 进程不存在,关闭成功。
) else (
    echo 进程存在,需要重复关闭。
)

if errorlevel 1 判断的是系统变量errorlevel的值是否大于等于1。
errorlevel的值等于0的时候,说明find命令从tasklist命令的结果里面找到了指定的关键字,也就是说进程仍然存在。

   

    请阅读一下4条(尽量仔细),下面内容代表了我的所有想法,
    1、我想您应该是没仔细看我的回复,是的,我是这个意思,但我的其他问题是errorlevel 返回值,大于0 的时候,返回的信息,(1)是说明上一个命令没有执行成功,(2)还是没有找到需要的结果.  比如上一条命令出现语法错误,执行到一半,是不是也会返回1?那返回大于1具体的意义就不知道了,我大概查了一下,说是有好多种返回码,且用户不可定义,只能定义本脚本执行的返回码,不能定义errorlevel 。(因为帖子每小时的数量限制,所以只能很多问题放在这里问)
    2、VIP 用户可以提升每小时发帖数量的限制吗。如何从普通组到荣誉组到管理组,晋升机制
    3、大批量的互联网视频这个我们作为互联网一员当然是知道的。但内容你肯定也知道的,碎片式的,所以想寻求一份更系统和高效的学习资料,可以是视频和书籍,如果您回复的上一条评论中的视频就已经很好了,就您觉得很可以,很有含金量了。可以当这一条不存在,没有。
    4、一心想为本站贡献一份力所能及的力量,学习之后也会帮助本站内回复,发展,等,我觉得这份知识的共享和传播是一件很好的事请,所以期待能和你们一起做这件事,共事。所以我想知道我们团队有多少技术站,也期待我们团队有更多的类型的技术网站.

TOP

回复 16# GNGW
  1. tasklist /fi "imagename eq vmware-vmx.exe" 2>nul | find /i /n "vmware-vmx.exe" >nul
  2. if errorlevel 1 (
  3.     echo 进程不存在,关闭成功。
  4. ) else (
  5.     echo 进程存在,需要重复关闭。
  6. )
复制代码
if errorlevel 1 判断的是系统变量errorlevel的值是否大于等于1。
errorlevel的值等于0的时候,说明find命令从tasklist命令的结果里面找到了指定的关键字,也就是说进程仍然存在。

视频教程:
http://bbs.bathome.net/thread-31727-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

回复 18# 77七


    好 太感谢

TOP

回复 17# GNGW


   手误写错一处,重新编辑了
bat小白,请多指教!谢谢!

TOP

回复 15# 77七


    是的  因为初次接触,没有系统的知识,所以只能AI生成,然后自己在修改

TOP

虽然没有用,即使是哪种情况,为1都可以判断认为进程存在,但我还想问errorlevel 为1证明上一句执行失败,那这个失败的定义是上一条命令未能找到最终需求结果,还是因为其他问题,上一条命令没能执行成功?还是皆有?关于bat 的学习资料 ,有没有靠谱的一些资料可以分享,我们都在互联网上,那基本的一些互联网资源我们都能看到,所以靠谱程度不用说,基本上的视频都是讲解的碎片式的,不能系统的学习这些,从历史,到发展到现在的变化,以及如果查询这些东西在什么位置等等,有没有一个合适的资源,视频或者是书籍可以系统的学习整体或部分系统性的知识,并不是网络上碎片化的那种。

TOP

本帖最后由 77七 于 2024-2-21 10:00 编辑

回复 14# GNGW


  1楼代码ai写的?
  1. @echo off
  2. :command_loop
  3. set /a n+=1
  4. echo "第%n%次尝试关闭虚拟机"
  5. vmrun stop "D:\VMware\VMLib\hengFengBankClone\hengFengBankOne.vmx" soft
  6. tasklist /FI "IMAGENAME eq vmware-vmx.exe" 2>NUL | find /I "vmware-vmx.exe" 1>nul && (
  7. timeout /t 30
  8. goto :command_loop
  9. ) || (
  10. taskkill /f /t /im "vmware.exe"
  11. timeout /t 10
  12. shutdown /s /t 0
  13. )
复制代码
bat小白,请多指教!谢谢!

TOP

回复 8# Batcher
  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. :command_loop
  8. vmrun stop "D:\VMware\VMLib\hengFengBankClone\hengFengBankOne.vmx" soft
  9. :check_process
  10. tasklist /FI "IMAGENAME eq vmware-vmx.exe" 2>NUL | find /I /N "vmware-vmx.exe">"F:\vmware_process.txt"
  11. if %~z1 EQU 0 (
  12. del "F:\vmware_process.txt"
  13. taskkill /f /t /im "vmware.exe"
  14. timeout /t 10
  15. shutdown /s /t 0
  16. )
  17. del "F:\vmware_process.txt"
  18. echo "虚拟机仍在运行中"
  19. IF %retry_script_count% EQU 3(
  20. exit /b 1
  21. )
  22. IF %retry_count% NEQ 5 (
  23. set /a retry_count+=1
  24. timeout /t 30
  25. del "F:\vmware_process.txt"
  26. goto:check_process
  27. )
  28. echo "连续检查5次,虚拟机仍没关闭,请等待程序再次尝试关闭虚拟机"
  29. timeout /t 30
  30. set /a retry_count=0
  31. set /a retry_script_count+=1
  32. setlocal
  33. set /a new_retry_script_count=%retry_script_count%+1
  34. echo "第%new_retry_script_count%次尝试关闭虚拟机"
  35. timeout /t 10
  36. endlocal
  37. goto:command_loop
复制代码
这是我修改之后的代码,问题详见上个楼层(13搂)

TOP

tasklist /FI "IMAGENAME eq vmware-vmx.exe" 2>NUL | find /I /N "vmware-vmx.exe">"F:\vmware_process.txt"   这个有没有更好的方法替代?我想检查一个虚拟机(就是VMware应用内的虚拟机)进程是不是存在,如果存在,进行重复关闭此进程,如果不存在,就关闭虚拟机(VMware程序)进程,然后进行关机。想问下还有没有更好的办法

TOP

注意复合命令可能需要
setlocal enabledelayedexpansion

TOP

回复 10# GNGW


   if 0 equ 3(错了,参考5楼
bat小白,请多指教!谢谢!

TOP

回复 8# Batcher


[img][/img]

TOP

回复 8# Batcher


    只显示命令语法不正确,但具体是哪里不正确,不清楚

TOP

返回列表