Script datei peer Batch Datei auslösen und beide danach wieder löschen.

  • Hallo An Alle!

    Ich habe eine PDF entdeckt wie man mit hilfe einer Batch Datei script Starten kann und danach das beide gelöscht werden .

    hier mal den script wo ich nicht weiß wie das geht und ob es richtig zusammen gefügt ist das es vom pdf kopiert wurde.

    [autoit]

    Func _SelfDelete($iDelay = 0)
    Local $sCmdFile
    FileDelete(@TempDir & "\scratch.bat")
    $sCmdFile = ’ping -n ’ & $iDelay & ’127.0.0.1 > nul’
    @CRLF & ’:loop’ &

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

    @CRLF & ’del "’ & @ScriptFullPath & ’"’ & @CRLF & ’if exist "
    ’ & @ScriptFullPath
    & ’" goto loop’ & @CRLF & ’del ’ & @TempDir & ’\scratch.bat’
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)
    EndFunc

    [/autoit]

    das würde für mich sehr hilfsreich sein wenn ich ein programm das mit autoit selbst installiert und man auf gefordert wird ein neu start zu machen und das er dann weiter macht. und am Ende sollen die Batch und das script sich löschen.

    bitte um hilfe stellung.

    wenn es geht mit ein kleinen Beispiel : mit einer Msgbox


    MfG

    Baron

  • das ist genau was die Batch macht.
    Erstellen kannst Du diese ganz einfach in Scite mit der Tastenfolge: selfdelete und Space ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • ich habe ein beispiel in diesem forum gefunden hier erstmal das Script.

    [autoit]

    HotKeySet("{ESC}", "_SelfDelete") ;wenn Hotkey gedrueckt wird - Selbstzerstoerung

    While 1
    Sleep(5)
    WEnd

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

    Func _SelfDelete($iDelay = 0)
    Local $sCmdFile
    Local $iDelay
    FileDelete(@TempDir & "\scratch.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _
    & 'del "' & @ScriptFullPath & '"' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & '\scratch.bat'
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)
    Exit
    EndFunc

    [/autoit]

    doch wenn ich das Script als Exe fertig Stellen will kommt die folgende fehler meldung :


    F:\SpeicherOrt\test.au3(9,18) : ERROR: $iDelay already declared as parameter :wacko:
    Local $iDelay
    ~~~~~~~~~~~~~~~~~^
    F:\SpeicherOrt\test.au3 - 1 error(s), 0 warning(s)


    Woran liegt es das er das Script nicht erstellt ?????? vielleicht win7 daran schuld


    Gruß Baron

  • Hallo Baron1977,

    in der Func _SelfDelete ist $iDelay bereits als optionaler Parameter enthalten, lösche lso innerhalb der func einfach die lokale Deklaration von $iDelay, also:

    [autoit]

    Func _SelfDelete($iDelay = 0)
    Local $sCmdFile
    ;Local $iDelay
    .
    .

    [/autoit]

    mfg (Auto)Bert

  • Danke AutoBert!

    Das Script konnte ich als exe erstellen doch jetzt kommt ein Zweites Probleme wollte jetzt testen mit esc ob der Script verschwindet dann kommt diese meldung

    Line 8 (File "F:\SpeicherOrt\test.exe"):


    Error: Variable used without being declared.

    was ist jetzt wieder für ein probleme ;( ;(

    das hätte doch jetzt klappen müßen um zu testen das er sich löscht das Script.


    Bitte um Hilfe


    MfG

    Baron

  • Probier mal den hier:

    Spoiler anzeigen
    [autoit]

    HotKeySet("{ESC}","_SelfDelete")
    While 1 * Sleep(10)
    WEnd

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

    Func _SelfDelete()
    $iDelay = 0
    Local $sCmdFile
    FileDelete(@TempDir & "\scratch.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _
    & 'del "' & @ScriptFullPath & '" > nul' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & '\scratch.bat'
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)
    Exit
    EndFunc

    [/autoit]
  • THX SEuBo!


    es geht jetzt habe auch mal versucht mit einer MsgBox mit daran zu hengen :thumbup:


    [autoit]

    MsgBox(0,"test","test")
    _SelfDelete()
    Exit

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

    Func _SelfDelete()
    $iDelay = 0
    Local $sCmdFile
    FileDelete(@TempDir & "\scratch.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _
    & 'del "' & @ScriptFullPath & '" > nul' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & '\scratch.bat'
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)
    Exit
    EndFunc

    [/autoit]

    1000 Dank


    MfG

    Baron

  • Hallo Baron1977,

    diese Version funktioniert bei mir:

    [autoit]

    ;HotKeySet("{ESC}", "_SelfDelete") ;wenn Hotkey gedrueckt wird - Selbstzerstoerung
    _SelfDelete()

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

    Func _SelfDelete($iDelay = 0)
    Local $sCmdFile
    FileDelete(@TempDir & "\scratch.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _ ;Schleifeneinstieg der BAT
    & 'del "' & @ScriptFullPath & '"' & @CRLF _ ;löscht das aufrufende Skript bzw. EXE
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _ ;falls Skript/Exe noch da gehe zu Loop
    & 'del ' & @TempDir & '\scratch.bat' ;das erstellte temporäre BATch-File löschen
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile) ;hier wird das BATch-File erstellt
    Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE) ;und jetzt wird es unsichtbar ausgeführt
    Exit ;dieses Skript/Exe beenden
    EndFunc

    [/autoit]

    das Skript nicht mit F5 starten, sonst löscht es sich selbst!!! Oder danach unbedingt nocheinmal abspeichern!!!
    Edit: ist aber genau das Gegenteil was die Überschrift ausagt. Hier wird ein BATch-File erstellt, danach diese Skript und das BATch-File wieder gelöscht!
    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (23. Januar 2010 um 03:11)

  • Edit: ist aber genau das Gegenteil was die Überschrift ausagt. Hier wird ein BATch-File erstellt, danach diese Skript und das BATch-File wieder gelöscht!


    Ja das weiß ich man hat mir damals erzählt das man es von einer Batch datei nur Starten könnte und Das autoit die Funktion nicht besitzt das auch das Script sich von Selbst Löschen tut wusste ich vorher nicht wahr immer von aus das es Nicht gehen würde laut einen Usermitglied jetzt Weiß ich es das Autoit die Funkion Gibt.


    Ich Danke nochmal an

    AutoBert und SEuBo

    1000 Dank das wahr eine Große Hilfe :thumbup:

  • Geht doch alles viel eleganter ohne Batchfile(s) ;)
    hier

    Grüße
    SlowlyDead


    Das hat nur das kleine Problem, dass die Exe nicht gelöscht wird, falls dies beim 1. mal nicht möglich ist. Die batch probiert es so lange, bis die Datei gelöscht ist.
    Ganz ohne CMD funktioniert das (dafür aber nicht sofort):

    [autoit]

    Func _DeleteOnReboot($sFile=@ScriptFullPath)
    ; Author: Prog@ndy
    Local $aResult = DllCall("kernel32.dll", "int", "MoveFileExW", "wstr", $sFile, "ptr", 0, "dword", 4)
    If @error Then Return SetError(1, @error,0)
    Return $aResult[0]
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von progandy (20. Februar 2010 um 13:02)