我们在网络上有一个定期更新的文件,我需要打开它并保持最新,但是当它打开时,没有其他人可以访问它来为我更新它。
所以我想我可能有一个脚本可以:
- 将文件复制到我的桌面
- 打开文件并等待一个小时
- 关闭 winword (仅关闭该实例而非全部)
- 删除文件
- 回到开始。
我找不到只关闭文件而不是关闭每个 winword 的方法。
以下是目前的脚本(已删除所有私人内容)
echo off
cls
echo.
TIMEOUT /T 10 /NOBREAK
echo.
:start
echo.
echo Updating File...
echo.
copy "T:\Shared\file.doc" "C:\Users\USERNAME\Desktop"
echo.
echo.
TIMEOUT /T 2
echo.
echo Opening File
echo.
start "File" "file.doc"
echo.
echo Waiting For One Hour...
echo.
TIMEOUT /T 3600
echo.
echo Deleting Old File
echo.
del "C:\Users\USERNAME\Desktop\file.doc"
goto start
答案1
你可以捕捉PID要调用的进程或要打开的文件西米利都并设置进程 ID数字赋值给一个变量,然后使用该变量任务终止使用/PID
我在下面发布的开关示例批处理脚本,然后根据您的逻辑在下面发布另一个脚本,我认为这需要如何适应它,但根据需要进行相应调整。
此逻辑使用以下方式创建几个动态临时文件:为/F解析通过管道传输到临时文件的进程 ID,以捕获将要使用的数值任务终止杀死该特定的进程ID(即/PID
开关)。
此逻辑执行以下操作:
- 打开进程\文件
- 等了一个小时
- 仅关闭进程\打开的文件的那个实例
批处理脚本示例
(启动一个进程,捕获该进程的 [PID] 进程 ID,然后根据相同的进程 ID 终止该进程)
此脚本设置应用程序变量,可能需要是计算机上应用程序的完整路径(SET App=
),以及该应用程序将打开的文件的完整路径等(SET AppFile=
)。
@ECHO ON
:::SET App=C:\Program Files\Microsoft Office 15\root\office15\WINWORD.EXE
SET App=%windir%\%Notepad.exe
:::SET AppFile=C:\Users\User\Desktop\Test\ENTER_EXIT_List.docx
SET AppFile=C:\Users\User\Desktop\Test\List.txt
SET DynamicTempFile1=%temp%\~tmpProcessID1_%~nx0.dat
SET DynamicTempFile2=%temp%\~tmpProcessID2_%~nx0.dat
IF EXIST "%DynamicTempFile1%" DEL /Q /F "%DynamicTempFile1%"
IF EXIST "%DynamicTempFile2%" DEL /Q /F "%DynamicTempFile2%"
::start a process and pass it a file, etc. to open or process and then pipe the process ID to a temp file
WMIC PROCESS CALL CREATE "%App% %AppFile%" | FIND "ProcessId">>"%DynamicTempFile1%"
::parse out unneeded characters for only numeric values from temp file
FOR /F "DELIMS==; TOKENS=2" %%F IN (%DynamicTempFile1%) DO ECHO %%~F >> "%DynamicTempFile2%"
::sets the PID to a variable with the value in the temp file
SET /P processid= < %DynamicTempFile2%
::wait 3600 seconds or one hour and then run the taskkill command
PING /n 3600 127.0.0.1 > nul
::kill process by PID from the previously set variable
TASKKILL /PID %processid%
GOTO EOF
更多资源
根据您的逻辑编写脚本示例
这假设您正在打开并终止已复制的文件,但只需在顶部设置变量。
ECHO OFF
::://Set application full path and the app file full path that the app will open
:::SET App=%windir%\%Notepad.exe
:::SET AppFile=C:\Users\User\Desktop\Test\List.txt
SET App=C:\Program Files\Microsoft Office 15\root\office15\WINWORD.EXE
SET DesktopFolder=C:\Users\<USERNAME>\Desktop
::SET AppFile=%DesktopFolder%\file.doc
SET AppFile=C:\Users\<USERNAME>\Desktop\file.doc
SET CopyFile=T:\Shared\file.doc
SET DynamicTempFile1=%temp%\~tmpProcessID1_%~nx0.dat
SET DynamicTempFile2=%temp%\~tmpProcessID2_%~nx0.dat
IF EXIST "%DynamicTempFile1%" DEL /Q /F "%DynamicTempFile1%"
IF EXIST "%DynamicTempFile2%" DEL /Q /F "%DynamicTempFile2%"
CLS
ECHO.
TIMEOUT /T 10 /NOBREAK
ECHO.
:start
ECHO.
ECHO Updating File...
ECHO.
COPY /Y "%CopyFile%" "%DesktopFolder%"
ECHO.
ECHO.
TIMEOUT /T 2
ECHO.
ECHO Opening File
ECHO.
:::START "File" "file.doc"
::start a process and pass it a file, etc. to open or process and then pipe the process ID to a temp file
WMIC PROCESS CALL CREATE "%App% %AppFile%" | FIND "ProcessId">>"%DynamicTempFile1%"
::parse out unneeded characters for only numeric values from temp file
FOR /F "DELIMS==; TOKENS=2" %%F IN (%DynamicTempFile1%) DO ECHO %%~F >> "%DynamicTempFile2%"
::sets the PID to a variable with the value in the temp file
SET /P processid= < %DynamicTempFile2%
ECHO.
ECHO Waiting For One Hour...
ECHO.
TIMEOUT /T 3600
ECHO.
ECHO Deleting Old File
ECHO.
::kill process by PID from the previously set variable
TASKKILL /PID %processid%
DEL /Q /F "%AppFile%"
GOTO start
答案2
我的一个想法是在写字板中打开该文件,然后只需使用任务终止功能,这样就不会干扰打开的 Word 文档!
编辑无效,打开的是乱码。
编辑 2:. 使用 wordviewer.exe 和我的想法工作。
我现在在 wordviewer 上使用任务终止功能,而我的其他 word 文档则保持不变!
然后每小时循环一次,生成文件的新副本!