1

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


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

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

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


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

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

1 ответ1

2

Вы можете перебирать файлы .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 "{DEL}"                            >>"%TempVBSFile%"
ECHO Wscript.Sleep 500                                    >>"%TempVBSFile%"
ECHO WshShell.SendKeys "%~1.pdf"                          >>"%TempVBSFile%"
ECHO Wscript.Sleep 500                                    >>"%TempVBSFile%"
ECHO WshShell.SendKeys "{TAB 3}"                          >>"%TempVBSFile%"
ECHO Wscript.Sleep 500                                    >>"%TempVBSFile%"
ECHO WshShell.SendKeys "{ENTER}"                          >>"%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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .