【问题标题】:Bat file that detect's when close an specific Excel workbook检测何时关闭特定 Excel 工作簿的 Bat 文件
【发布时间】:2018-06-21 06:40:38
【问题描述】:

我有这段代码可以检测 Excel.exe 任务何时终止:

:Excel
tasklist /nh /fi "imagename eq Excel.exe" | find /i "Excel.exe" >nul && (
goto Excel
) || (
goto Continue
)

:Continue

我想修改此代码以使其在我关闭名为

的 Excel 工作簿时检测到

数据库.xlsm

这是因为我需要关闭我在执行批处理时打开的所有 Excel 工作簿以使其转到

:继续

我希望它转到:仅在关闭 Database.xlsm 文档时继续。

我希望你能帮助我。谢谢!

【问题讨论】:

    标签: windows batch-file command-line cmd


    【解决方案1】:

    您可以尝试以下代码,使用findstr 过滤进程的窗口标题:

    :Excel
    timeout 1 /NOBREAK
    tasklist /V /FI "IMAGENAME eq excel.exe" /FO LIST | findstr /RIXC:"Window Title: *Microsoft Excel - Database.xlsm" > nul && (
        goto :Excel
    ) || (
        goto :Continue
    )
    :Continue
    

    您可能需要将部分字符串 Microsoft Excel - Database.xlsm 调整为您的实际 Excel 窗口标题。

    我在:Excel 行之后插入了timeout 1 /NOBREAK 以避免CPU 负载过重。

    【讨论】:

    • 为什么要同时使用/R(正则表达式)和/C(文字搜索字符串)?我认为它们是相互排斥的。
    • 不,他们不是; /C 确保空格成为搜索字符串的一部分,/R 将整个字符串定义为“正则表达式”(因为 /C 始终默认为文字模式);不使用/Cfindstr [/R] "abc def" 实际上定义了两个搜索字符串abcdef;还请查看this thread...
    【解决方案2】:

    尝试使用windowtitle 过滤器..

    首先使用/V 标志查看窗口标题..然后尝试对其进行过滤

    tasklist /v /FI "imagename eq Excel.exe" /FI "windowtitle eq Microsoft Excel - Database.xlsm" 
    

    它可能/可能不工作,具体取决于确切的 excel 和 windows 版本

    或者您可以在之后使用您的find进行过滤

    【讨论】:

    • 在我的例子中,确切的标题是“Database.xlsm - Excel”我尝试了这段代码,但在关闭 Database.xlsm 后,CMD 卡在这部分,所以命令一直转到:Excel .请问还有什么建议吗?谢谢
    猜你喜欢
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多