Verständnissproblem mit Run(@ComSpec & " /c "

  • Guten Morgen an Alle,

    ich habe da ein kleines verständnissproblem.
    Ich möchte gerne diesen Befehl per Run ausführen:
    (Dieser Befehl bewirkt das alle Ordner die mit jh0100 anfangen gelöscht werden.)

    for /d %%i in ("d:\test\jh0100*.*") do rd /s /q "%%i"

    also schreibe ich doch:

    [autoit]

    Run(@ComSpec & " /c " & 'for /D %%i in ("d:\test\jh0100*.*") do rd /S /Q "%%i"', "", @SW_HIDE)

    [/autoit]

    Allerdings muss ich wohl etwas falsch machen da es so ja nicht funktioniert. ?(:cursing:
    Weil das hier was ich hier im Forum als Beispiel gesehen hatte funktioniert ja.
    Aber was mach ich nur falsch???

    [autoit]

    Run(@ComSpec & " /c " & 'shutdown -s -t 5000', "", @SW_HIDE)
    sleep(500)
    Run(@ComSpec & " /c " & 'shutdown -a', "", @SW_HIDE)

    [/autoit]

    Wenn ich aber fix ein Batchdatei mache funktioniert es. Ich möchte es aber gerne mit Run machen. :S

    Kann mir jemand von Euch helfen ???

    Einmal editiert, zuletzt von JanausSm (27. Februar 2009 um 10:34)

  • Das Problem hier ist einfach dass Run != Kommandozeile ist!!

    Du kannst gerne die CMD über Run() starten und dann per ControlSend(...) ja deinen Befehl übertragen


    Gruß

    Prajoss

    "Never touch a running System!"

  • Ist es nicht, die Funktion Run() ist nunmal nicht identisch mit der Kommandozeile!

    Deshalb kannst du damit auch nicht wirklich eine Batchprogrammierung machen.

    Du könntest wie gesagt entweder die cmd starten und dann deinen Befehl per ControlSend() einfügen und ausführen oder

    du lässt eine *.bat Datei per Script mit deinem Inhalt erstellen, ausführen und anschließend löschen.


    Gruß

    Prajoss

    "Never touch a running System!"

  • Weis jetzt nicht ob ich wieder viel zu umständlich Denke aber ich habs jetzt so gemach:

    [autoit]

    Func _Remove_Dir(ByRef $remove_input)

    Global $output, $OpenTemp, $aRecords

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

    ; schreibt die Daten in den Tempfile
    $Temp = _TempFile(@TempDir & "\", "tst_", ".bat", 7)

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

    $hFile=FileOpen($Temp,"2")
    FileWriteLine($hFile,'for /d %%i in ("'&$remove_input&'") do rd /s /q "%%i"')
    FileClose($hFile)

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

    ; _FileReadToArray liest den Tempfile in ein Array ein
    If Not _FileReadToArray($Temp,$aRecords) Then
    MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    For $x = 1 to $aRecords[0]
    $output = $output & $aRecords[$x] & @LF
    Next

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

    ShellExecute($Temp,"",@SystemDir, "", @SW_HIDE)

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

    ; löschte den Tempfile wieder
    Sleep(2000)
    FileDelete($Temp)
    ; Prüft ob der löschvorgang erfolgreich war
    if FileExists($remove_input) == 0 Then Return ( +1 )

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

    EndFunc

    [/autoit]

    Naja es funktioniert und ich bin zufrieden.

    Wenn jemand einen besseren Vorschlag hat würde mich das Interessieren :)

    Grüße

    • Offizieller Beitrag

    Hallo,

    einfach mal die Hilfe zu For aufmerksam (fettgedrucktes) lesen!

    aus der For-Hilfe

    Du darfst also, wenn Du den Befehl direkt in der Befehlszeile eingibst, bei den Variablen nur ein %-Zeichen benutzen.

    So sollte es funktinieren!

    [autoit]

    Run(@ComSpec & " /c " & 'for /D %i in ("d:\test\jh0100*.*") do rd /S /Q "%i"', "", @SW_HIDE)

    [/autoit]
  • Ist es nicht, die Funktion Run() ist nunmal nicht identisch mit der Kommandozeile!


    Na logo, nur halt mit @ComSpec
    Dann ist es die vollwertige Kommandozeile.
    Man sollte natürlich auch den "Working Dir" Parameter nutzen, aber im Prinzip kann man exakt das selbe damit machen

    Padmak