parameter parsen mit Leerzeichen im Pfad

  • Hallo an alle, insbesindere unsere Syntax Experten. Wie muss man es anstellen um einen Filenamen mit Leerzeichen in der Args Zeile einzufügen, ich hatte es auch schon mit "'" pfad "'" versucht hat auch nichts geholfen, sofern das Programm ohne Leerzeuchen ist funktioneirt es.


    Recht herzlichen Dank schonmal


    lg und schönen Sonntag noch

  • ok dann formulier ich es mal ausführlicher, es gibt 2 Funktionen, eine die PSEXEC Parameter generiert und eine die ein Powershell Script ausführt: Die restlichen Dateitypen funktionieren alle, nur dass mit JPG und mp3 macht probleme wegen den "" vermute ich mal:

    lg und eine schöne Woche

  • ich hatte es auch schon mit "'" pfad "'" versucht...

    Versuche es mal mit """ :

    Beispiel zur Anschauung :

    ConsoleWrite('Path = ' & """Path\with spaces\Viewer.exe""" & @CRLF)

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ich denke das Problem liegt eher in dem resultierenden Powershell-Skript.
    Das Skript welches du erzeugst sieht für mich - obwohl ich keine Ahnung von PS habe - nicht richtig aus:

    Code
    + " -f -c start "" " + $batchFilePath

    1. wird der Inhalt vom Dateipfad nach den doppelten Anführungszeichen mit einem Leerzeichen dazwischen gesetzt. Das könnte je nach Pfadparser Probleme bereiten.
    2. Es gibt keine abschließenden doppelten Anführungszeichen.

    Es scheint also weniger ein Problem auf AutoIt-Seite zu sein.
    Ich würde daher empfehlen dir das PS-Skript mal ausgeben zu lassen und mal händisch auszuführen.
    Dann sollte dir der ps-Interpreter schon sagen was da noch im argen liegt.

    Eine AutoIt-Sache dennoch:

    AutoIt
    RunWait(@ComSpec & ' /c powershell.exe [...]

    Ich verstehe den Sinn von @ComSpec hier noch nicht ganz.
    Du willst ja etwas mit Powershell ausführen lassen und eben nicht mit der cmd.exe.
    Warum schleifst du dann aber den Powershell-Aufruf erst noch durch den Kommandozeileninterpreter cmd.exe anstatt powershell direkt aufzurufen?

  • JPG: Genrell, macht es Sinn parameter ohne inhalt (start "") zu übergeben? oder ist das wie Aspirinjunkie angesprochen hat, ggf. eher ein Formatirungsfehler?

    MP3: gehört der Parameter -Idummy nicht ggf zu vlc und muss ggf. mit in die "" eingekapselt werden? (da bin ich mir aktuell unsicher!)

    Aber generell stimme ich AspirinJunkie zu:

    Lass das Skript die entsprechende batch erzeugen und führe sie dann mal manuell aus in einem PS fenster und schaue was er dir dann als Fehlermeldung raus wirft bzw. ggf. siehst du dann auch shcon den Formtierungsfehler in der batch

  • AutoIt
    jo danke erst einmal für Euer Feedback, also das generierte Script was im Normalfall funktioniert sieht wie folgt aus, as sollte dann ja nur nach den Parametern, hier -i , sattt dem Powershell der Pfad von vlv drin stehen, möglicherweise ist es ein Problem von Powershell:


    mit mp3 option und intigrierten Playerprogramm:



    Der Befehl der als Einzelbefehl geht ist folgender, an der Reihenfolge ist da aber grundsätzlich nichts anders:

    $command = '"' & $PsExecPath & '" -d -i -s \\' & $Computer & ' -u ' & $Username & ' -p "' & $Password & '" "' & $Player & '" -Idummy "' & $file & '"'

    lg und schöne Woche noch

    3 Mal editiert, zuletzt von casi4712 (3. Juni 2024 um 11:22)

  • Aber Zeile 11 funktioniert so auch? Kann ich mir gerade schwerlich vorstellen:

    "..." + $var + "..."c:\Program Files\VideoLAN\VLC\vlc.exe"..." + $var2

    Müsste das nicht eher so sein:

    "..." + $var + '...' + $var2

    wobei '...' = ' -i "c:\Program Files\VideoLAN\VLC\vlc.exe" -Idummy '

    Das führt zu:

    "-u $username -p $password \\" + $computer + ' -i "c:\Program Files\VideoLAN\VLC\vlc.exe" -Idummy ' + $batchFilePath


    Also 2 " müssen in ' geändert werden und hinter -Idummy muss ein Leerzeichen hinzugefügt werden. (Sorry für das Englisch bevor :D )

    2 Mal editiert, zuletzt von Moombas (3. Juni 2024 um 11:11)

  • Wie gesagt, der Fehler liegt (mind.) in Zeile 11.
    Als erstes sein Beispiel ausgeführt (nur Zeile 11), dann die gleiche Zeile nur mit meinen Änderungen (ja ich habe das Leerzeichen nach dem -Idummy im Test vergessen, solltest du aber setzen :P )

    Also in deinem Skript Zeile 30 anpassen (ungetestet): Return "' " & $params & ' "' & $splayer & '"' & " -Idummy '"

    Einmal editiert, zuletzt von Moombas (3. Juni 2024 um 15:19)

  • so danke noch mal für das Feedback, ich habe das jetzt dahingehend angepasst, hoffe hatte dich richtig verstanden, aber geht leider immer noch nicht:



    lg und danke noch mal für die Mithilfe

  • nein das ist nicht richtig., ich habe dir oben das Beispiel mit dran gepackt gehabt, musste aber dennoch was korrigieren. Also deine Zeile 36 müsste so aussehen:

    Return "' " & $params & ' "' & $splayer & '"' & " -Idummy '" -> Return ' -i "c:\Program Files\VideoLAN\VLC\vlc.exe" -Idummy '

  • Hm, ist doch echt zum Schweinemelken, ich habs jetzt so korrigiert wie du sagtest:

    AutoIt
    	ElseIf StringRight($filePath, 4) = ".mp3" Then ;Audiofile
            ;$splayer = '"c:\Program Files\VideoLAN\VLC\vlc.exe"'
           Return ' -i "c:\Program Files\VideoLAN\VLC\vlc.exe" -Idummy '
        Else

    die resultierende PS Zeile sieht ja eigentlich gut aus

    $psexecArgs = "-u $username -p $password \\" + $computer + " -i "c:\Program Files\VideoLAN\VLC\vlc.exe" -Idummy " + $batchFilePath

    passiert leider immer noch nix, werd langsam wahnsinnig;)


    Achso noch was, habe das resultierende mal in ISE geöffnet, da wird folgendes bemeckert:

    Code
    $jobs = foreach ($computer in $computers) {
        if ($computer -ne $env:COMPUTERNAME) {
            $psexecArgs = "-u $username -p $password \\" + $computer + " -i "c:\Program Files\VideoLAN\VLC\vlc.exe" -Idummy " + $batchFilePath
            Start-Job -ScriptBlock {
                param($psexecCommand, $psexecArgs)
                Start-Process -FilePath $psexecCommand -ArgumentList $psexecArgs -NoNewWindow -Wait

    Das c:\Programm wird unterstrichen, Meldung: Unerwartetes Token "c:\Program" in Ausdruck oder Anweisung.
    + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

    lg

    Einmal editiert, zuletzt von casi4712 (3. Juni 2024 um 17:01)

  • die resultierende PS Zeile sieht ja eigentlich gut aus

    $psexecArgs = "-u $username -p $password \\" + $computer + " -i "c:\Program Files\VideoLAN\VLC\vlc.exe" -Idummy " + $batchFilePath

    Wo sieht die denn gut aus?
    Die doppelten Anführungszeichen sind ja gar nicht escaped im String und geöffnete Anführungszeichen ohne korrespondierendes schließendes Anführungszeichen glaube ich kaum, dass dies in PS so korrekt ist.
    Wenn schon dann sollte es am Ende eher so aussehen:

    Code
    $psexecArgs = "-u " + $username + " -p " + $password + " \\" + $computer + " -i ""c:\Program Files\VideoLAN\VLC\vlc.exe"" -Idummy """ + $batchFilePath + '"'
  • Stimmt, wie gesagt habs ja dann auch noch gesehen dass das so nicht hinhaut, deswegen der Nachtrag. Ok du hast Recht wenn ich im resultierenden PS Script diese Zeile ersetze dann funzt es, aber wie übergebe ich das nun korrekt in meiner ElsIf Anweisung an $params, damit das so erzeigt wird?


    lg und recht herzlichen Dank

  • Donnerwetter, das war ja eine Zangengeburt lach, es funz jetzt, nur komisch dass die anderen Dateitypen funktioniert hatten.


    lg und schönen Abend noch an alle Helfer

  • casi4712 : Du ignorierst ja auch die ganze Zeit was ich geschrieben habe...

    $psexecArgs = "-u $username -p $password \\" + $computer + " -i "c:\Program Files\VideoLAN\VLC\vlc.exe" -Idummy " + $batchFilePath

    Die beiden unterstrichenen habe ich dir so NICHT angegeben, sondern dort müssten bei meinem Beispiel ' rein... aber egal jetzt...

  • ok hatte ich übersehen, sorry dass mit den vielen '"''" kann einen schon wahnsinnig machen, ich versuche gerade am ende nach Batchfile noch eine Variable aus Autoit reinzunehmen, die ans ende gehört, aber breche mir da wieder die Ohren bei. Wo fehlt denn jetzt was:

    AutoIt
    '$psexecArgs = "-u " + $username + " -p " + $password + " \\" + $computer + "' & $parameter & '""" + $batchFilePath + ''" + "' & $Zparams & '''"'' & @CRLF & _


    lg und schöne Woche noch

  • Bin mir nicht 100%ig sicher, da ich nicht sicher bin welche dieser Variablen nun aus deinem psscript sind (und somit mit in die "" sollen) und welche aus Autoit sind (und somit nicht mit in die "" sollen). Aber auf Basis wie du es oben geschrieben hast würde ich es so machen:

    AutoIt
    '$psexecArgs = "-u " + $username + " -p " + $password + " \\" + $computer + " ' & $parameter & ' " + $batchFilePath + " " + "' & $Zparams & '"' & @CRLF & _

    Ergebnis:

    $psexecArgs = "-u " + $username + " -p " + $password + " \\" + $computer + " Deine-$parameter " + $batchFilePath + " " + "Deine-$Zparams"

    ->

    $psexecArgs = "-u " + USERNAME + " -p " + PASSWORD + " \\" + COMPUTER + " Deine-$parameter " + C:/PATH/ + " " + "Deine-$Zparams"

    ->

    -u USERNAME -p PASSWORD \\COMPUTER Deine-$parameter C:/PATH/ Deine-$Zparams