Board logo

标题: [文件操作] 批处理如何根据指定的关键词关闭窗口? [打印本页]

作者: soykoa    时间: 2023-10-19 03:12     标题: 批处理如何根据指定的关键词关闭窗口?

请教各位老师一个问题.....如何用批处理命令,,,关闭包含某个关键词的所有窗口,,,但排除这个关键词的exe,,,,其他都关闭....           比如关键词是:   你好            电脑里可能运行打开着包含     *你好*.txt   或者文件夹,,,或者说浏览器窗口也包含这个关键词.......想把其他都关闭掉,,,,,,只保留     *你好*.exe      谢谢
作者: wanghan519    时间: 2023-10-19 04:19

不够谨慎,请小心测试
  1. Get-Process | ?{$_.MainWindowTitle -imatch ".*你好(?!.*\.exe$)"} | %{Stop-Process $_.Id}
复制代码

作者: Nsqs    时间: 2023-10-19 06:04

  1. $word=New-Object -ComObject Word.Application
  2. $word.Tasks['test'].Close()
  3. $word.Quit()
复制代码
这样应该是最准确的,不会直接结束主进程
作者: Nsqs    时间: 2023-10-19 06:25

本帖最后由 Nsqs 于 2023-10-19 07:35 编辑

回复 2# wanghan519


在我的测试发现中似乎gps命令的mainwindowtitle属性仅返回被激活过的该进程,举例
如果该进程有10个,其中有9个是闲置,未被用户激活过,那么只返回最后那一个被激活的窗口标题,其余9个都返回空
比如
(Get-Process).MainWindowTitle|?{$_ -match 'test'}
还有如果想获取PowerShell的标题,以window11为例,可能还同时存在,设置不同的系统,比如有的人用的是WindowsTermina
那么用gps pwsh显然就获取不到标题了
(gps pwsh).MainWindowTitle
还得进行更多细节上的判断比如换成WindowsTerminal
(gps WindowsTerminal).MainWindowTitle
才能获取,只能说这个方法并不不实用

另外Get-Process有个方法叫CloseMainWindow() 也可以不用调用stop-process

算是看懂楼主需求了,只排除进程某个窗口,关闭该进程其他窗口(不包含被排除窗口)...
作者: soykoa    时间: 2023-10-19 10:57

回复 4# Nsqs


   是的老师,,,,排除  *你好*.exe,,,,,关闭其他的txt...浏览器...文件夹等  标题中含有 *你好* 的窗口   这个对我来说太难了,,,实在没办法写出来,,,,不知道有办法解决不




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2