首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Windows批处理文件命令打开、等待、保存、关闭和复制文件

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

Stack Overflow用户
提问于 2021-07-08 12:56:07
回答 2查看 2.8K关注 0票数 0

对于我的.bat,我想:

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

现在,我可以复制和粘贴文件,但是我不知道如何使用cmd函数打开它,并保存它。

谢谢你的帮助。

我的代码是:

代码语言:javascript
运行
复制
@echo off
cmd "O:\XXXX\*.*"
xcopy/y "O:\XXXX\*.*" "O:\XXX\" 
pause
EN

回答 2

Stack Overflow用户

发布于 2021-07-11 11:11:52

Marie (TooLong;ToRead)在不连贯的评论中

我建议,在这种情况下,一种更简单的替代方法是使用一个简单的命令行工具--参见Orlandos Sendkey实用程序(这个示例几乎就是您想要做的)

  1. 从cpap.com.br/orlando下载sendkey
  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宏可以很容易地完成这一操作。

在所有这些更改之后,您的非工作文件现在应该在您的问题中被替换为

代码语言:javascript
运行
复制
@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 见后面的

代码语言:javascript
运行
复制
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策略限制)限制在命令行,最好编写自己的自动保存宏,但是,我的问题是,我不知道您是否需要用于多个input.xlsm。

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

代码语言:javascript
运行
复制
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之前进行/WAIT,并且取决于您的vbs文件处理的设置方式,您可能不需要在起始行中使用Wscript。

现在将您的.bat替换为

代码语言:javascript
运行
复制
@echo off
start /WAIT Wscript OpenRunSaveExit.vbs
xcopy/y "\\XXX\Dossier_avant*.*" "\\XXX\Dossier_apres\"
pause

检查它是否运行,而不需要任务命中。

最后,为什么使用2-4行.bat,因为桌面快捷方式可能更容易使用。因此,为.vbs文件创建一个快捷方式(右键单击.vbs,并以英文表示其创建快捷方式),并将其移动到桌面。

然后像这样更改属性(其中&有一个特殊的含义,因此.vbs文件名不能有空格或&.)

代码语言:javascript
运行
复制
%comspec% /c "start /wait wscript.exe OpenRunSaveExit.vbs & xcopy/y "\\XXX\Dossier_avant*.*" "\\XXX\Dossier_apres\" & pause"

我忘了在这张图片中添加Peters start / wait,直到稍后

票数 2
EN

Stack Overflow用户

发布于 2021-07-08 13:03:01

除非提供这样的接口,否则不能通过批处理与Microsoft (或大多数其他程序)进行交互。但是,可以选择用VBS,即通过Microsoft支持的接口与该软件进行交互。

要打开程序,请检查start命令,例如:

代码语言:javascript
运行
复制
start /B excel.exe <filename>

然后,您可以等待用户编辑和保存文件两分钟,或者也可以利用pause,如果您不想引入保存和使用xcopy复制之间的竞争条件。

或者像这样使用start

代码语言:javascript
运行
复制
start /WAIT /B excel.exe <filename>

因此,打开的文件阻塞操作,一旦它关闭(用户保证不会编辑或保存),那么它将解除阻塞,xcopy将在没有任何时间依赖特性的情况下进行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68302091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档