Использование «IF Loop», чтобы открыть PDF, если он закрыт - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь создать пакетный файл, который будет постоянно проверять, открыт ли определенный PDF, если нет, то он открывает указанный файл PDF.

Я новичок в программировании пакетных файлов, но смог создатьпакетный файл с «start», который открывает конкретный PDF. После некоторых исследований я считаю, что цикл for с использованием списка задач может дать мне то, что мне нужно, но я не знаю, как его реализовать.

start AcroRd32.exe "C:\Users\user1\Documents\Folder1\PDF Forms\App.pdf "

Любая помощь будет принята!

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Вам не нужен цикл for, для этого достаточно создать дополнительный процесс, который не нужен.

@echo off
:start
tasklist /FI "WINDOWTITLE eq App.pdf" | find /i "AcroRd32.exe"
if errorlevel 1 start AcroRd32.exe "C:\Users\user1\Documents\Folder1\PDF Forms\App.pdf"
timeout /t 10 >nul 2>&1
goto :start
0 голосов
/ 28 октября 2019

UNTESTED
Это может сработать для вас. Я думаю, что это не удастся, если PDF только для чтения пользователю.
ПРЕДУПРЕЖДЕНИЕ Будьте очень осторожны, печатая или копируя type nul>>"%filename%". Если вы запутались, вы можете стереть содержимое файла. Должно быть двойным >>. Одно > сотрет содержимое.

set "fname=C:\Users\user1\Documents\Folder1\PDF Forms\App.pdf"

:infiniteloop

:: Check if the file is accessible, goto openfile if it is
(type nul>>"%fname%" && goto :openfile) >nul 2>nul

:: 1 second delay so the loop doesn't go crazy
timeout /t 1 >nul
goto :infiniteloop


:openfile

start AcroRd32.exe "%fname%"

:: Give it time to open before checking again
:: I chose 30 seconds
timeout /t 30>nul
goto :infiniteloop

Это зависит от того, заблокирован ли файл или что-то еще в той программе, в которой он открыт. На моем компьютере Adobe Reader блокирует файл PDF, а Microsoft Edge - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...