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

[文本处理] [已解决]怎样用批处理命令结束非当前运行bat窗口?

情况如下:我运行1.bat 时,中间会调用到2.bat 和3.bat
我能不能在1.bat 里写入选择命令,
结束掉非1.bat 窗口以外的所有bat窗口。
本来是想写taskkill /f /im cmd.exe的
但是这样会同时结束正在运行的主1.bat窗口。。。
因为每次运行批处理,进程的PID都是变化的。所以加入PID也不管用。
求高手指教,谢了。。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 7# 631206885

存到文件里再读取竟然就没事了,好家伙!

TOP

回复 3# bailong360


    谢了,你的代码起到了决定性重用

TOP

回复 2# yiwuyun
谢了。我想到的思路是
查看所有非本身CMD.exe 进程的PID并生成文件123.txt
然后用 taskkill命令 结束123.txt 里记录的PID
若存在123.txt这个文件则循环杀进程
否则进入下一跳命令。。
完成了呢

TOP

谢谢2楼和3楼意见,我在执行a.bat 的时候中途要调用b.bat 我奇怪的是不管在b中如何写入退出代码都不能结束b窗口,所以才想到结束非主要CMD进程。。。
4楼的代码,我植入调用b.bat 后面,刚好可以用上。。完美解决问题。
谢大家了

TOP

  1. @echo off
  2. :1
  3. @del 123.txt /q
  4. 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
  5. @echo off
  6. for /f "delims=" %%i in (%cd%\123.txt)do set n=%%i
  7. echo %n%
  8. taskkill /pid %n%
  9. if exist %cd%\123.txt goto 1
  10. pause
复制代码
鉴于大家的意见,我写了这代码。执行起来还可以

TOP

回复 2# yiwuyun
筛选的任务倒不难...就是wmic导出的数据是什么鬼编码,连自己都不认得...还是无解的样子
  1. @echo off
  2. 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
  3. pause
复制代码
1

评分人数

TOP

如果你能获取cmd.exe的PID,有一个思路。你首先获取所有cmd.exe进程的PID,然后启动2.BAT,再次获取所有cmd.exe的PID,两个集合相减,此时就很容易得到新启动的BAT的PID,3.BAT也相应处理。有了PID,结束进程就很容易了。在POWERSHELL中比较容易实现,在BAT中,可能相对难 一点。

TOP

返回列表