Может ли пакет ответить на диалоговое окно и заполнить требуемое имя файла?

435
user2720402

Я пытался, echo 'filename.txt' | <command>но безрезультатно. Имя файла не было введено в диалоговое окно успешно, чтобы заполнить поле имени файла, как мне нужно.


Диалоговое окно

На рисунке ниже показано диалоговое окно. <command>Позвонит принтер по умолчанию, установленное в разделе «Устройства и принтеры» в Windows, которая является Adobe PDF в данном случае.

Я думаю, что есть два пути решения этой проблемы. Одним из них является общий способ использования пакетной команды для ввода текста в диалоговое окно в целом. А другой - это особый способ работы с принтером Adobe.

Может ли пакет ответить на диалоговое окно и заполнить требуемое имя файла?


Более детально

Эта команда является abc.exe -batch myplot.sesи abc.exeявляется программным обеспечением, которое отображает какие-то двоичные данные, и когда она запускается, единственным вводимым человеком является диалоговое окно выше. -batchОпция используется для пакетных операций. Это myplot.sesфайл, содержащий способ построения двоичных данных (контур, временной ряд и т. Д.), И я хотел бы, чтобы диалоговое окно использовало то же имя .sesфайла, что и файл, в поле имени файла для сохранения каждого файла в формате PDF.

1

1 ответ на вопрос

2
Pimp Juice IT

Вы можете перебирать .sesфайлы в каталоге через цикл for и использовать start для запуска исполняемого файла и передачи ему имени .sesфайла. Внутри цикла для каждой итерации вы можете использовать подстановки переменных, чтобы получить имя файла из .sesфайла, исключая расширение.

Вы можете передать имя файла (без расширения) в качестве первого аргумента ( %~1) для вызова после имени метки подпрограммы. Этот первый аргумент может быть включен в некоторую динамическую логику VBScript, используя sendkeys для ввода желаемого результата .pdfиз диалогового окна « Сохранить файл PDF как» .

Наконец, используйте cscript для выполнения динамически созданного VBScript, чтобы он соответствующим образом выполнял эмулируемые команды нажатия клавиш и управлял диалоговыми окнами, чтобы помочь дальнейшей автоматизации - он все еще пакетный, но с некоторыми встроенными расширенными, управляемыми и настраиваемыми логиками Windows.


Скрипт (пакетный пример)

Примечание: вам может понадобиться поиграть с, timeout /t <#>чтобы указать больше или меньше секунд ожидания в зависимости от того, сколько времени после sesчтения файла в exe до того, как откроется окно Сохранить файл PDF как . То же самое относится и sendkeys TAB <#>к количеству вкладок, которые нужно нажать в этом окне, поскольку я смог провести лишь небольшое тестирование с помощью функции « Сохранить вывод на печать как заголовок» и виртуального принтера PDF.

@ECHO ON  SET "WinTitle=Save PDF File As" SET "sesDir=C:\Folder\sesFiles" SET "exe=C:\Folder\abc.exe"  FOR %%A IN ("%sesDir%\*.ses") DO ( start "" %exe% -batch "%%~A" timeout /t 10 CALL :dynVBS "%%~NA" ) EXIT  :dynVBS SET TempVBSFile=%temp%\~tmp_SavePDFFileAs_Temp.vbs IF EXIST "%TempVBSFile%" DEL /F /Q "%TempVBSFile%"  ECHO Set WshShell = WScript.CreateObject("WScript.Shell") >"%TempVBSFile%" ECHO Wscript.Sleep 900 >>"%TempVBSFile%" ECHO WshShell.AppActivate "%WinTitle%" >>"%TempVBSFile%" ECHO Wscript.Sleep 900 >>"%TempVBSFile%" ECHO WshShell.SendKeys "^a" >>"%TempVBSFile%" ECHO Wscript.Sleep 500 >>"%TempVBSFile%" ECHO WshShell.SendKeys "" >>"%TempVBSFile%" ECHO Wscript.Sleep 500 >>"%TempVBSFile%" ECHO WshShell.SendKeys "%~1.pdf" >>"%TempVBSFile%" ECHO Wscript.Sleep 500 >>"%TempVBSFile%" ECHO WshShell.SendKeys "" >>"%TempVBSFile%" ECHO Wscript.Sleep 500 >>"%TempVBSFile%" ECHO WshShell.SendKeys "" >>"%TempVBSFile%" CSCRIPT //nologo "%TempVBSFile%"  GOTO :EOF 

Дополнительные ресурсы

  • за

    • Переменные замены (FOR /?)

      Кроме того, была улучшена замена ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:

      %~I - expands %I removing any surrounding quotes (") %~nI - expands %I to a file name only 
  • Начните

  • Тайм-аут
  • вызов
  • SendKeys
  • AppActivate
  • Cscript