使用 Windows 批处理文件命令打开、等待、保存、关闭和复制文件

问题描述 投票:0回答:2

与我的

.bat
我愿意:

  • 打开 xlsx 文件,
  • 等待2分钟,
  • 使用保存选项关闭文件
  • 将此文件复制到另一个文件夹。

现在我可以复制并粘贴该文件,但我不知道如何使用 功能打开它,并保存它。

谢谢您的帮助。

我的代码是:

@echo off
cmd "O:\XXXX\*.*"
xcopy/y "O:\XXXX\*.*" "O:\XXX\" 
pause
batch-file cmd
2个回答
2
投票

玛丽的评论脱节

我建议了一种更简单的替代方法来完成您需要的操作 场合是使用简单的命令行工具参见Orlandos Sendkeys 实用(例子几乎就是你想做的)

  1. 从 cpap.com.br/orlando 下载发送密钥
  2. 查看演示如何运行
  3. 使用空白表打开 Excel,然后在 CMD 下运行此演示字符串

SendKeys.exe 1.5 10 "Microsoft Excel" "Hello!~{PAUSE 2}After 2s.~{PAUSE 2}%(FS)~"

  1. 适应您自己版本的 Excel 键,因为 %(FS) 是 ALT 文件以英文保存

你回复了

@KJ 谢谢你,KJ,不幸的是我无法用我的电脑下载 Orlando。

因此,我们继续以更肮脏的方式进行操作,但是您仍然需要一种方法来保存文件,通过调用自动保存,这最容易在源.xlsm中使用扩展的Excel宏来完成,无论如何之后所有这些更改您的非工作文件现在应该在您的问题中替换为

@echo off
start "Excel Running" /MIN EXCEL.EXE "\\XXX\Fichier.xlsm"

REM add a delay of **2 minutes !** whilst sheet recalculates before saving a copy
timeout 120

REM 复制此时尚未使用按键保存的文件将不会

REM 是您真正需要解决问题的东西,除非您使用宏?

REM 稍后见

xcopy/y "\\XXX\Dossier_avant*.*" "\\XXX\Dossier_apres\"


REM add a 3 second delay to check above worked but is not really needed
timeout 3

REM temporary for debugging. Later just REM it out
 TASKLIST /M |Find /i "exce"

REM this line should be working with either a SUCCESS: or ERROR:
TASKKILL /T /F /IM excel.exe

REM keep this line for seeing errors above, once happy, it can become REM PAUSE
PAUSE

我认为如果您受到命令行的限制(受 IT 政策),最好编写自己的自动保存宏,但是,我的问题是我不知道您是否需要它用于多个输入。xlsm .

因此,将其另存为 OpenRunSaveExit.vbs 到 .bat 所在的工作文件夹中。我在后面的步骤中没有在名称中使用空格或

&
是有原因的。

Set WshShell = WScript.CreateObject("WScript.Shell")
' You may need to include the path to excel.exe if it is a portable version like mine
WshShell.Run "EXCEL.EXE "+"\\XXX\Fichier.xlsm", 9
' 120000 milli-seconds = 2 minutes
WScript.Sleep 120000
' These are the English key combinations for ALT+File+Save . SO alter or remove if not needed
WshShell.SendKeys "%FS"
' These are the English key combinations for ALT+File+eXit . SO alter if needed for French Excel
WshShell.SendKeys "%FX"
' Lets us wait 2 seconds for clean closure
WScript.Sleep 2000

正如Peter在他的回答中指出的那样你需要在xcopy之前/等待,并且根据你的vbs文件处理的设置方式,你可能不需要在起始行中使用Wscript

现在将您的 .bat 替换为这个

@echo off
start /WAIT Wscript OpenRunSaveExit.vbs
xcopy/y "\\XXX\Dossier_avant*.*" "\\XXX\Dossier_apres\"
pause

并检查它是否运行而不需要taskkill。

最后为什么要使用 2-4 行 .bat,因为桌面快捷方式可能更容易使用。因此,为 .vbs 文件创建一个快捷方式(右键单击 .vbs,英文名称为“创建快捷方式”),无论它在何处构建,都将其移至桌面。

然后像这样更改属性(其中 & 具有特殊含义,因此 .vbs 文件名不得包含空格或 &。)

%comspec% /c "start /wait wscript.exe OpenRunSaveExit.vbs & xcopy/y "\\XXX\Dossier_avant*.*" "\\XXX\Dossier_apres\" & pause"

附注我忘了在这张图片中添加 Peter 的

start / wait
,直到稍后:


1
投票

您无法通过 Batch 与 Microsoft Excel(或大多数其他程序)交互,除非它们提供这样的接口。不过,可以选择使用 VBS,即通过 Microsoft Excel 支持与该软件交互的界面。

如果只是打开程序,请检查

start
命令,例如:

start /B excel.exe <filename>

然后您可以等待用户 both 编辑并保存文件两分钟,或者如果您不想使用 pause

 在保存和复制之间引入竞争条件,也可以使用 
xcopy

或者像这样使用

start

start /WAIT /B excel.exe <filename>

因此打开的文件会阻止操作,一旦关闭(不保证用户进行编辑或保存),它将解除阻止,并且

xcopy
将在没有任何时间相关功能的情况下发生。

© www.soinside.com 2019 - 2024. All rights reserved.