【问题标题】:Using Taskkill in command prompt (Batch)在命令提示符下使用 Taskkill(批处理)
【发布时间】:2013-11-08 05:49:26
【问题描述】:

我有 4 个 excel 文件(city.xls、rule.xls、adv.xls 和 maping.xls),所有的 excel 文件都在其中打开。如何在批处理/CMD 编程中使用 taskkill 强制关闭一个文件(例如:mapping.xls)?

【问题讨论】:

    标签: batch-file cmd taskkill


    【解决方案1】:

    Taskkill 将消除一个进程及其所有窗口。你的工作簿可以在同一个excel实例下全部打开,所以taskkill不能做你需要的。

    您可以使用 AutoIt、nircmd、cmdow 等工具来关闭您需要的窗口,但您必须处理对话框要求保存工作簿的可能性。

    这是一个批处理文件(只需保存为 .cmd 并更改 xlsx 文件),其中包含一个脚本部分,用于搜索工作簿并在没有对话框的情况下关闭它。没有防弹,只能在打开工作簿的用户的同一会话下工作,而只是一个起始样本。

    @if (@This==@IsBatch) @then
    @echo off
    rem **** batch zone *********************************************************
    
        rem call javascript part of batch file
        cscript //nologo //e:Javascript "%~dpnx0" /workbook:"j:\wherever\myWorkbook.xlsx"
    
        rem End of batch area. Ensure batch ends execution before reaching
        rem javascript zone
        exit /b
    
    @end
    // **** Javascript zone *****************************************************
    
        if (!WScript.Arguments.Named.Exists('workbook')) {
            // if no workbook argument, no work to do
            WScript.Quit(1);
        };
    
        // retrieve workbook name
        var workbook = WScript.Arguments.Named.Item('workbook');
    
        var exitCode = 0;
        try {
            // search for workbook application
            var wb = GetObject(workbook);
    
            // get handle to application containing workbook
            var app = wb.Application;
    
            // close workbook. Ask for save = false
            wb.Close( false );
    
            // if no more workbooks open in application, close it
            if (app.Workbooks.Count == 0){ 
                app.Quit();
            };
    
        } catch(e){
            // some kind of problem with objects
            // WScript.Echo( e.description );
            exitCode = 2;
        };
        app =null;
        wb  =null;
        WScript.Quit(exitCode);
    

    【讨论】:

    • 我认为每个工作簿都在单独的进程中,但我喜欢这个脚本。+1
    • 刚用excel 2007测试,不知道其他版本。如果你双击一个excel文件,就会启动一个进程。如果您双击另一个 excel 文件,它将在同一进程下的新窗口中打开。现在,如果您直接从运行命令或 Windows 菜单中调用 excel,将创建一个新进程。因此,这取决于用户以及如何打开工作簿。
    【解决方案2】:

    来自 Taskkill 的帮助 (taskkill /?)

    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"

    【讨论】:

    • 如果所有工作簿都在同一个可执行文件实例中打开,所有工作簿都将关闭,因为可执行文件已关闭
    • "PID ge 1000" id 在这里可能不需要。可能应该使用窗口标题eq。+1 任何方式。
    猜你喜欢
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多