Lange Zeile mit vielen Anführungszeichen in cmd ausführen aus AutoIT heraus

  • Hallo zusammen,

    ich habe schon lange hier im Forum interessante Beiträge gelesen und mir das ein oder andere angeeignet.

    Nun benötige ich selbst Hilfe.

    Ich möchte einen langen Befehl an die Eingabeaufforderung schicken und diesen ausführen lassen, in dem Befehl sind viele Anführungszeichen, sowohl solche "" als auch solche ''.

    Leider kriege ich es nicht hin das er mir das annimmt und wenn AutoIT keinen Fehler meldet, wird der Befehl nicht ausgeführt.

    Was mache ich falsch?

    Aktuell sieht mein Befehl für die cmd so aus:

    for /f "delims=" %%i in ('dir /b "%DriveLetter%:\Accuchek\Backup*"') do rd /s /q "%DriveLetter%:\Accuchek\%%i" 2>nul


    für AutoIT habe ich ihn dann so umgeschrieben:

    _RunDos(for /f ""delims="" %i in ('dir /b ""%DriveLetter%:\Accuchek\Backup*""') do rd /s /q ""%DriveLetter%:\Accuchek\%i"" 2>nul)

    Das mit den doppelten "" vor und nach den eigentlichen Anführungszeichen habe ich aus einem anderen Forum gelesen, hat aber auch nicht geholfen.

    Wenn ich die ganze Zeile mit ' davor und danach versehe klappt es trotzdem nicht.

    Bestimmt ist es ganz einfach und ich stehe auf dem Schlauch.

  • Hast du es auch so probiert?

    _RunDos("for /f ""delims="" %i in ('dir /b ""%DriveLetter%:\Accuchek\Backup*""') do rd /s /q ""%DriveLetter%:\Accuchek\%i"" 2>nul")

    Doppelte " sind escaped und können damit in einem String ($string="IchBinEinString") verwendet werden.

    Du musst natürlich auch die " um den String schreiben.

    Ohne fliegen einem die Fehler ja nur so um die Ohren :D

  • So (etwas kürzer als die Version von Kanashius ) sollte es auch gehen:

    _RunDos('for /F "delims=" %I IN (''dir /B "%DriveLetter%:\Accuchek\Backup*"'') do rd /S /Q "%DriveLetter%:\Accuchek\%I" 2>nul')

    Ich frage mich nur, wann und wo die Umgebungsvariable %DriveLetter% gesetzt/aktualisiert wird... denn mit _RunDos wird ja eine neue Console geöffnet, welche dann eine Kopie der Umgebungsvariablen des AutoIt-Scripts erhält - es könnte also sein, dass %DriveLetter% in der neuen Console noch nicht deklariert wurde.

    Noch ein Tip: Parameter würde ich immer 1:1 übernehmen... denn je nach Befehl ist z.B. /f ist nicht unbedingt gleichbedeutend mit /F!

  • Super vielen Dank an Kanashius & Bitnugger,

    nun kann ich die Zeile so ausführen ohne tausend Fehler zu erhalten.

    Was ich noch nicht geschafft habe, ist es meine Globale Variable aus dem AutoIt Script "$DriveLetter" mit ins CMD Fenster zu übernehmen, damit er es je nach gewähltem Laufwerksbuchstaben ausführen kann.

    So wie es im Code steht mit %DriveLetter% klappt es nicht.

    Wenn ich "''dir /B "$DriveLetter & ":\Accuchek\Backup*""'' versuche, funktioniert es auch nicht, dabei wäre das doch der richtige Weg in AutoIt einen Pfad zusammenzusetzen - oder?

    Wie ihr vielleicht merkt komme ich von Batch, aber lerne mich gerade in AutoIt ein, da man hier auch schöne GUIs zu den Scripten erstellen kann.

  • Da fehlt ein & Zeichen vor dem $DriveLetter, ansonsten verkettest du die Strings falsch, bzw. du musst erst den String terminieren und dann die Variable benennen.

    Dein ausgeschnittener Teil ist ja nicht dein gesamter String.

    Alternativ könntest du auch die Opt ExpandVarStringsnutzen und die Variable direkt im String mit führendem und nachhängendem $-Zeichen einfügen.

    Code
    Opt("ExpandVarStrings", 1)
    
    $variable = "Hallo"
    
    MsgBox(0, 0, "In der deklarierten Variable befindet sich das Wort $variable$")