标题: [文本处理] [已解决]怎样用批处理命令结束非当前运行bat窗口? [打印本页]
作者: 631206885 时间: 2015-5-16 23:47 标题: [已解决]怎样用批处理命令结束非当前运行bat窗口?
情况如下:我运行1.bat 时,中间会调用到2.bat 和3.bat
我能不能在1.bat 里写入选择命令,
结束掉非1.bat 窗口以外的所有bat窗口。
本来是想写taskkill /f /im cmd.exe的
但是这样会同时结束正在运行的主1.bat窗口。。。
因为每次运行批处理,进程的PID都是变化的。所以加入PID也不管用。
求高手指教,谢了。。
作者: yiwuyun 时间: 2015-5-17 08:27
如果你能获取cmd.exe的PID,有一个思路。你首先获取所有cmd.exe进程的PID,然后启动2.BAT,再次获取所有cmd.exe的PID,两个集合相减,此时就很容易得到新启动的BAT的PID,3.BAT也相应处理。有了PID,结束进程就很容易了。在POWERSHELL中比较容易实现,在BAT中,可能相对难 一点。
作者: bailong360 时间: 2015-5-17 09:37
回复 2# yiwuyun
筛选的任务倒不难...就是wmic导出的数据是什么鬼编码,连自己都不认得...还是无解的样子- @echo off
- for /f "skip=2 tokens=3 delims=," %%i in ('wmic process where name^="cmd.exe" get commandline^,ProcessID /format:csv^|findstr /vi "%~nx0"') do echo %%i
- pause
复制代码
作者: 631206885 时间: 2015-5-17 11:19
- @echo off
- :1
- @del 123.txt /q
- for /f "skip=2 tokens=3 delims=," %%i in ('wmic process where name^="cmd.exe" get commandline^,ProcessID /format:csv^|findstr /vi "%~nx0"') do echo %%i >>123.txt
- @echo off
- for /f "delims=" %%i in (%cd%\123.txt)do set n=%%i
- echo %n%
- taskkill /pid %n%
- if exist %cd%\123.txt goto 1
- pause
复制代码
鉴于大家的意见,我写了这代码。执行起来还可以
作者: 631206885 时间: 2015-5-17 11:24
谢谢2楼和3楼意见,我在执行a.bat 的时候中途要调用b.bat 我奇怪的是不管在b中如何写入退出代码都不能结束b窗口,所以才想到结束非主要CMD进程。。。
4楼的代码,我植入调用b.bat 后面,刚好可以用上。。完美解决问题。
谢大家了
作者: 631206885 时间: 2015-5-17 15:07
回复 2# yiwuyun
谢了。我想到的思路是
查看所有非本身CMD.exe 进程的PID并生成文件123.txt
然后用 taskkill命令 结束123.txt 里记录的PID
若存在123.txt这个文件则循环杀进程
否则进入下一跳命令。。
完成了呢
作者: 631206885 时间: 2015-5-17 15:10
回复 3# bailong360
谢了,你的代码起到了决定性重用
作者: bailong360 时间: 2015-5-17 22:31
回复 7# 631206885
存到文件里再读取竟然就没事了,好家伙!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |