我试过了echo 'filename.txt' | <command>
,但无济于事。文件名没有成功输入到对话框中,无法按照我的需要填写文件名字段。
对话框
下图是弹出的对话框,<command>
会调用Windows“设备和打印机”下设置的默认打印机,这里是Adobe PDF。
我认为有两种方法可以解决这个问题。一种是通用方法,即通常有一个批处理命令来将文本输入到对话框中。另一种是处理 Adobe 打印机的特定方法。
更多详情
该命令是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