3

我在 Windows 7 schtasks 工具中创建了一个任务。它提醒我在本月 15 日打开我应该查看和更新​​的 Excel 工作簿。便利。

问题是,大约有 60% 的机会我已经打开了 Excel,我想我什至有很小的机会打开了那个工作簿。那么结果一点也不优雅。该任务试图打开 Excel 的另一个副本,这抱怨只读访问,工作簿本身也是如此。

在 SCHTASKS 或 BATCH 文件(或您推荐的任何其他方便的 Windows 工具)中是否有方法首先检查 Excel 是否打开,如果打开,只需切换到它,而不是打开 Excel 的第二个副本? 我看到了关于在 .BAT 文件中使用 TASKLIST 来检查它是否打开的说明:

 TASKLIST /FI "IMAGENAME eq EXCEL.EXE" 2>NUL | FIND /I /N "EXCEL.EXE">NUL
 IF "%ERRORLEVEL%" EQ "0" START excel "C:\Project4\MonthlyTracking.xlsx"

但我不知道如何在 BATCH 文件中做出反应,如果它是打开的。我在 BATCH 文件中看不到告诉已经运行的 excel 进程打开文件的方法。

非常感谢!

4

2 回答 2

3

与其尝试使用该文件启动 Excel,不如仅启动该文件:

"C:\Project4\MonthlyTracking.xlsx"

这将打开 excel,如果它没有与该文件一起运行,它将在正在运行的 excel 中打开该文件,如果它已经打开,它会给你一个错误 - 你可以使用它:

"C:\Project4\MonthlyTracking.xlsx" 2>nul
if errorlevel neq 0 echo file already opened 
于 2013-10-17T16:52:28.800 回答
1

您可以让 Windows ShellExecute 功能逻辑使用默认关联程序(在本例中为 Excel)来启动文件,如何做到这一点?只是尝试直接运行文件,而不是将文件作为应用程序的参数传递。

TASKLIST /FI "IMAGENAME eq EXCEL.EXE" 2>NUL | FIND /I "EXCEL">NUL && (
    START /B "ShellExecute Excel File" "C:\Project4\MonthlyTracking.xlsx"
)
于 2013-10-17T17:26:26.710 回答