Runs Befehl und ich steh auf dem Schlau

  • Hallo,

    kaum hat man mal ein paar Monate nichts mehr gemacht steht man auf dem Schlau. Ich hoffe ihr könnt mir einen Tip geben.

    In der Shell bekomme ich es so zum laufen in meinem Skript nicht.
    $Folder4
    $t

    sind gefüllt von vor Funktion.

    [autoit]

    run ("c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe /t "$folder4&$t&"_test.pdf" "Printer","",)

    [/autoit]

    Danke ^^

  • [autoit]

    run ("c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe /t "$folder4&$t&"_test.pdf" "Printer","",)

    [/autoit]

    Da fehlt nicht nur ein &, da fehlen evtl. auch Backslashe und definitiv ein Leerzeichen und auch Anführungszeichen die Pfade oder Parameter mit Leerzeichen umschließen, wenn du das ausführen willst sollte dich Scite erstmal mit Syntaxfehlern bombardieren.

    So dürfte das eher korrekt sein:

    [autoit]

    run('"c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"' & ' /t "' & $folder4 & $t & '_test.pdf"' & ' Printer')

    [/autoit]

    Jenachdem ob dein Pfad mit Backslash endet oder nicht könnte auch das hier korrekt sein:

    [autoit]

    run('"c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"' & ' /t "' & $folder4 & '\' & $t & '_test.pdf"' & ' Printer')

    [/autoit]

    Und um das ganze übersichtlicher und leichter austauschbar zu machen würde ich cmdline Aufrufe eher komplett aus Variablen zusammensetzen:

    [autoit]


    $sProgramm = "c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"
    $sFile = $folder4 & $t & "__test.pdf"
    $sParameter = "Printer"

    [/autoit][autoit][/autoit][autoit]

    run('"' & $sProgramm & '" "' & $sFile & '" ' & $sParameter)

    [/autoit]


    Beachten sollte man immer, dass Pfade und Dateinamen die dynmaisch verändert werden auch Leerzeichen enthalten könnten. Sofern das der Fall ist muss man Anführungszeichen verwenden. Deswegen ist es wesentlich sicherer wenn man diese grundsätzlich verwendet.

  • Die Frage ist generell, ob man auf solche Fragen überhaupt antworten sollte!
    Man sieht nicht den Ansatz davon, selbst das Problem lösen zu wollen geschweige denn EINE EINZIGE ZEILE so zu schreiben, dass man den Zeileninhalt analysieren könnte...
    Gerade im Gegenteil, es wird ALLES dafür getan, dass andere sich wieder mal Gedanken machen und nach erfolglosem Reiben der Glaskugel völlig wirre Ideen posten.

    @SCCSSF, Wieso packst du alles alles in eine Zeile, anstatt die offensichtlich FALSCHEN Teile mit den "in der Shell laufenden" Eingaben zu vergleichen? Und wenn du schon funktionierende "Shellzeilen" hast, wieso postest du diese nicht?

    @misterspeed, guter Ansatz, schlechtes Ende 8) Der TE copypastet deinen Code, lässt ihn laufen und als nächstes kommt wieder ein "...funktioniert auch nicht, bitte weitere Vorschläge um mir den Arm aus der Sonne zu legen !"
    Um den Unterschied zu seiner ja offensichtlich funktionierenden "Shellzeile" zu ermitteln ist es erforderlich, diese auch anzuzeigen!
    Daher würde ich

    [autoit]

    $folder4=@ScriptDir & "\"
    $t="" ;wtf...

    [/autoit][autoit][/autoit][autoit]

    $sProgramm = "c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"
    $sFile = $folder4 & $t & "__test.pdf"
    $sParameter = "Printer"

    [/autoit][autoit][/autoit][autoit]

    $run='"' & $sProgramm & '" "' & $sFile & '" ' & $sParameter
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $run = ' & $run & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]

    schreiben, denn JETZT sieht man im Vergleich die offensichtlichen Unterschiede!

  • So erstmal Herzlichen Dank an Euch. Klar kann ich mich Stunden damit beschäftigen und keine Lösung bekommen oder fragen.

    Ich bedanke mich auch herzlich für die Ausführlichen Ausarbeitung meines Problems.

    Hier mein Fertiges Skript. Mit ConsoleWrite habe ich es nicht laufen bekommen.

    [autoit]


    #include <File.au3>

    [/autoit][autoit][/autoit][autoit]

    $folder1 = "S:\Druck\Ma_2\__OK\" ;Eingang
    $folder3 = "S:\Druck\Ma_2\zwischen\" ;nacherstellen archiveren
    $folder4 = "S:\Druck\Ma_2\Ablage\" ;erstellte Ausgangsdatei
    $folder5 = "S:\Druck\Scripte\" ;Zwischenablage

    [/autoit][autoit][/autoit][autoit]

    FileDelete ($folder5&"*.pdf")
    FileMove ($folder1&"*.pdf",$folder3&"*.pdf")
    sleep (1000)
    runwait ('cmd /c java -jar "S:\\Druck\\Scripte\\pdfsam\\lib\\pdfsam-console-2.4.3e.jar" -o "S:\\Druck\\Scripte\\Ma_2-fertigedatei.pdf" -d "S:\\Druck\\Ma_2\\zwischen\\" concat',"", @SW_HIDE)
    Sleep (1000)
    FileDelete ($folder3&"*.pdf")
    $t=filegettime("S:\Druck\Scripte\Ma_2-fertigedatei.pdf",1,1)
    FileMove ("S:\Druck\Scripte\Ma_2-fertigedatei.pdf",$folder4&$t&"_Ma_2.pdf",1)
    $Programm = "c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"
    $Command = "/t"
    $File = $folder4 & $t & "_Ma_2.pdf"
    $Parameter = "Printer"

    [/autoit][autoit][/autoit][autoit]

    $run='"' & $Programm & '" "' & $Command & '" "' & $File & '" ' & $Parameter
    Run ($run)

    [/autoit]
  • Mit ConsoleWrite habe ich es nicht laufen bekommen.

    Was meinst du damit? Warum sollte es damit nicht laufen?
    Du weist schon was consolewrite(...) macht oder? Wenn nicht lies bitte in der Autoit Hilfe nach.

    Andy wollte dir mit seine Beispielcode in erster Linie verständlich machen, dass man Debugging betreiben sollte wenn etwas nicht wie gewünscht funktioniert. Bevorzugt macht man das schon vorher wenn man sich unsicher ist welche Konsequenzen die reale Code Ausführung haben könnte. Und genau dafür verwendet man sinnvollerweise meistens consolewrite() bevor man eine Zeichenkette an eine Funktion übergibt die evtl. richtig Scheiße bauen kann wenn die Zeichenkette fehlerhaft ist.

  • Danke auch an misterspeed.

    Ich habe mich jetzt nochmals intensiv mit consolewrite beschäftigt. Die Funktion war mir vorher nicht so bewusste wie es gehen würde. Dies ist leider das Problem wenn man sich mit der "Programmierung" nicht richtig auskennt und schnell mal was machen möchte.

    Dabei ist mir klar das mein Code am Ende nicht 100% aller sauberen Schreibweisen ist.

    Danke auch an den Beitrag von Andy, den ich vorher nicht gelesen hatte.

    Tutorial: Wie man Script-Fehler erfolgreich sucht/findet bzw. richtig debuggt