Kann der Stapel auf ein Dialogfeld reagieren und einen erforderlichen Dateinamen ausfüllen?

665
user2720402

Ich habe es versucht, echo 'filename.txt' | <command>aber ohne Erfolg. Der Dateiname wurde nicht erfolgreich in das Dialogfeld eingegeben, um das Dateinamenfeld so auszufüllen, wie ich es brauche.


Die Dialogbox

Das Bild unten zeigt das Dialogfeld, das sich öffnet. Sie <command>rufen den Standarddrucker auf, der unter "Geräte und Drucker" von Windows festgelegt ist. In diesem Fall handelt es sich um Adobe PDF.

Ich denke, es gibt zwei Wege, um dieses Problem zu lösen. Ein allgemeiner Weg besteht darin, dass es einen Batch-Befehl gibt, um im Allgemeinen Text in ein Dialogfeld einzugeben. Der andere ist eine spezielle Art, mit dem Adobe-Drucker umzugehen.

Kann der Stapel auf ein Dialogfeld reagieren und einen erforderlichen Dateinamen ausfüllen?


Mehr Details

Der Befehl ist abc.exe -batch myplot.sesund abc.exeist eine Software, die irgendeine Art von Binärdaten darstellt, und wenn sie ausgeführt wird, ist das obige Dialogfeld die einzige menschliche Eingabe. Die -batchOption wird für Stapelvorgänge verwendet. Dies myplot.sesist die Datei, in der die binären Daten (Konturen, Zeitreihen usw.) dargestellt werden. Ich möchte, dass das Dialogfeld denselben Dateinamen wie die .sesDatei für das Dateinamenfeld verwendet, um sie als PDF-Datei zu speichern.

1

1 Antwort auf die Frage

2
Pimp Juice IT

Sie können .sesDateien in einem Verzeichnis über eine for- Schleife durchlaufen und mit start die ausführbare Datei ausführen und den Dateinamen der .sesDatei übergeben. Innerhalb der Schleife können Sie für jede Wiederholung Variablensubstitutionen verwenden, um den Dateinamen aus der .sesDatei mit Ausnahme der Erweiterung abzurufen.

Sie können den Dateinamen (ohne die Erweiterung) als erstes Argument ( %~1) übergeben, das nach dem Namen der Subroutinenbezeichnung aufgerufen wird . Dieses erste Argument könnte in einige dynamische VBScript-Logik integriert werden, indem mit sendkeys die gewünschte Ausgabe .pdfaus dem Dialogfenster " PDF-Datei speichern unter" eingegeben wird.

Verwenden Sie schließlich cscript, um das dynamisch erstellte VBScript auszuführen, damit die emulierten Tastatureingabebefehle entsprechend ausgeführt und die Dialogfenster bearbeitet werden, um die weitere Automatisierung zu unterstützen - es ist immer noch Batch, jedoch mit einigen Windows-eigenen erweiterten, steuerbaren und anpassbaren, leicht verständlichen Logiken.


Skript (Batch-Beispiel)

Hinweis: Möglicherweise müssen Sie mit der timeout /t <#>Taste spielen, um mehr oder weniger Sekunden für die Wartezeit festzulegen. Dies hängt davon ab, wie lange nach dem sesEinlesen in das Exe das Fenster " PDF-Datei speichern unter" geöffnet wird. Das gleiche gilt sendkeys TAB <#>für die Anzahl der Registerkarten, die in diesem Fenster gedrückt werden müssen, da ich nur mit dem Befehl "Druckausgabe speichern unter" und dem virtuellen PDF-Drucker etwas testen konnte .

@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 

Weitere Ressourcen

  • zum

    • Variablensubstitutionen (FOR /?)

      Darüber hinaus wurde die Ersetzung von FOR-Variablenreferenzen verbessert. Sie können jetzt die folgende optionale Syntax verwenden:

      %~I - expands %I removing any surrounding quotes (") %~nI - expands %I to a file name only 
  • Start

  • Auszeit
  • Anruf
  • sendkeys
  • appactivate
  • cscript