可以批量响应对话框并填充所需的文件名吗?

可以批量响应对话框并填充所需的文件名吗?

我试过了echo 'filename.txt' | <command>,但无济于事。文件名没有成功输入到对话框中,无法按照我的需要填写文件名字段。


对话框

下图是弹出的对话框,<command>会调用Windows“设备和打印机”下设置的默认打印机,这里是Adobe PDF。

我认为有两种方法可以解决这个问题。一种是通用方法,即通常有一个批处理命令来将文本输入到对话框中。另一种是处理 Adob​​e 打印机的特定方法。

在此处输入图片描述


更多详情

该命令是abc.exe -batch myplot.ses绘制abc.exe某种二进制数据的软件,运行时唯一的人工输入是上面的对话框。该-batch选项用于批处理操作。该myplot.ses文件包含二进制数据的绘制方式(轮廓、时间序列等),我希望对话框使用与文件名字段相同的文件名,.ses以便将每个文件保存为 PDF 文件。

答案1

您可以通过以下方式迭代.ses目录中的文件为了循环并使用开始执行可执行文件并向其传递.ses文件的文件名。在每次迭代的循环中,您可以使用变量替换从文件中获取.ses不包括扩展名的文件名。

您可以将文件名(不带扩展名)作为第一个参数(%~1)传递给称呼在子程序标签名称之后。可以使用以下方法将第一个参数合并到某些动态 VBScript 逻辑中发送键输入所需的.pdf输出将 PDF 文件另存为对话窗口。

最后,使用脚本执行动态构建的 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
      
  • 开始

  • 暂停
  • 称呼
  • 发送键
  • 激活
  • 脚本

相关内容