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

[系统相关] 【已解决】批处理对多个同名不同版本的exe进程根据版本号有选择性的强制关闭

[复制链接]
 楼主| 发表于 2017-3-27 15:31:09 | 显示全部楼层
回复 13# Nsqs
我用其他的进程(多个同名)就出错

使用“1”个参数调用“GetVersionInfo”时发生异常:“路径的形式不合法。”
所在位置 行:1 字符: 49
+ ...  ($i in $p){$i.path+' 的版本号是 '+[System.Diagnostics.FileVersionInfo]::G ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: ( [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException


确认
是否确实要执行此操作?
正在目标“lmgrd (10360)”上执行操作“Stop-Process”。
[Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为“Y”):
发表于 2017-3-27 15:50:25 | 显示全部楼层
回复 16# solan


    我这里测试结束3个qq进程都可以获取
发表于 2017-3-27 15:55:54 | 显示全部楼层
  1. @PowerShell -Command "$p=(Get-Process -Name "notepad");ForEach ($i in $p){$i.path+' 的版本号是 '+[System.Diagnostics.FileVersionInfo]::GetVersionInfo($i.path).FileVersion;Stop-Process -id $i.id -Confirm};[Console]::Readkey()"
复制代码
我这里记事本也是正常的,不知道你的是怎么回事你可以用下面代码看看路径有没有错
  1. @PowerShell -Command "$p=(Get-Process -Name "notepad");ForEach ($i in $p){$i.path};[Console]::Readkey()"
复制代码
 楼主| 发表于 2017-3-27 16:05:09 | 显示全部楼层
回复 18# Nsqs


    记事本进程没错,换成我的lmgrd.exe进程就出错
 楼主| 发表于 2017-3-27 16:05:54 | 显示全部楼层
我的进程是有系统服务开启后产生的
 楼主| 发表于 2017-3-27 16:06:49 | 显示全部楼层
有好几个服务,但是开启后产生的进程是同名的
 楼主| 发表于 2017-3-27 16:11:58 | 显示全部楼层
回复 18# Nsqs

我知道了,我测试了多个普通程序的进程,用你的代码没错
但是是服务产生的进程,就出错
发表于 2017-3-27 16:27:58 | 显示全部楼层
本帖最后由 Nsqs 于 2017-3-27 16:29 编辑

回复 22# solan


    如果你需要关闭进程的话还有一种方法是判断进程窗口的标题来定位,这个方法,比获取路径更准确.因为也有可能出现同一个进程同一个路径同一个版本号却不同名标题.当然也可以只考虑版本号就行
 楼主| 发表于 2017-3-27 16:36:57 | 显示全部楼层
回复 23# Nsqs


    我的进程是服务的进程,是没有窗口标题的哦
让你麻烦了,还得谢谢你啊
 楼主| 发表于 2017-3-27 16:40:13 | 显示全部楼层
回复 9# pcl_test


    老大,具体怎么写啊,我学得不怎么样啊,知道的少,麻烦你了
发表于 2017-3-27 21:45:23 | 显示全部楼层
试试这样能否获取到你需要的版本号
  1. @echo off
  2. for /f "tokens=2 delims==" %%i in ('wmic process where "name='QQ.exe'" get executablepath /value ^| findstr "="') do (
  3.     set "FullPath=%%i"
  4. )
  5. set "FullPath=%FullPath:\=\\%"
  6. wmic datafile where "Name='%FullPath%'" get Version /value
  7. pause
复制代码
发表于 2017-3-28 06:08:23 | 显示全部楼层
  1. wmic process where "name='lmgrd.exe'" get executablepath,processid>result.txt
  2. pause
复制代码
把生成的txt文件压缩打包上传附件
 楼主| 发表于 2017-3-28 08:49:23 | 显示全部楼层
回复 26# ShowCode


   结果如下

没有可用实例。
节点 - WIN10-703210732
错误:
描述 = 无效查询



请按任意键继续. . .
 楼主| 发表于 2017-3-28 08:53:55 | 显示全部楼层
回复 27# pcl_test

我现在怎么上传不了,我就复制内容吧:
ExecutablePath  ProcessId  
                22012      
                7348      
                47780      
                29360
发表于 2017-3-28 09:53:57 | 显示全部楼层
回复 26# ShowCode


    win7 64系统,测试正常。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 17:23 , Processed in 0.021705 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表