Pode responder em lote a uma caixa de diálogo e preencher um nome de arquivo necessário?

1

Eu tentei echo 'filename.txt' | <command> , mas não adiantou. O nome do arquivo não foi inserido na caixa de diálogo com êxito para preencher o campo do nome do arquivo conforme necessário.

A caixa de diálogo

A imagem abaixo é a caixa de diálogo que aparece. O <command> chamará o conjunto de impressoras padrão em "Dispositivos e Impressoras" do Windows, que é o Adobe PDF neste caso.

Acho que há duas maneiras de resolver esse problema. Uma é uma maneira geral de haver um comando em lote para inserir texto na caixa de diálogo em geral. E o outro é uma maneira específica de lidar com a impressora Adobe.

Mais detalhes

O comando é abc.exe -batch myplot.ses e abc.exe é um software que plota algum tipo de dados binários e, quando executado, a única entrada humana é a caixa de diálogo acima. A opção -batch é usada para operações em lote. O myplot.ses é o arquivo que contém como os dados binários são plotados (contorno, séries temporais etc.) e gostaria que a caixa de diálogo usasse o mesmo nome de arquivo que o arquivo .ses para o campo de nome de arquivo para salvar cada um como um arquivo PDF.

    
por user2720402 10.09.2018 / 04:37

1 resposta

2

Você pode percorrer os arquivos .ses em um diretório por meio de um loop e usar inicie para executar o executável e passar o nome do arquivo .ses . Dentro do loop por cada iteração você pode usar substituições de variáveis para obter o nome do arquivo .ses excluindo a extensão.

Você pode passar o nome do arquivo (sem a extensão) como o primeiro argumento ( %~1 ) para ligar depois o nome do rótulo da sub-rotina. Esse primeiro argumento poderia ser incorporado em alguma lógica VBScript dinâmica usando sendkeys para digitar a saída desejada .pdf do > Janela de diálogo Salvar arquivo PDF como .

Por último, use o cscript para executar o VBScript construído dinamicamente para que ele execute os comandos emulados de pressionamento de tecla e manipule o diálogo Windows para ajudar a automatizar ainda mais - ainda é em lote, mas com algumas lógicas nativas do Windows, extensíveis, controláveis e fáceis de entender.

Script (Exemplo de lote)

Nota: Você pode precisar jogar com o timeout /t <#> para especificar mais ou menos segundos para aguardar, dependendo de quanto tempo uma vez o ses é lido no exe antes dessa janela de Salvar arquivo PDF como é aberto. O mesmo acontece com o sendkeys TAB <#> para o número de separadores a serem carregados nessa janela, uma vez que só consegui testar ligeiramente com o Gravar saída de impressão como título e impressora virtual em 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

Mais recursos

por 13.09.2018 / 14:56