Compilierte .au3 umbenennen per Batch

  • Ich möchte, dass meine Exe "Test.exe", die die Exe "TestTmp.exe" downloaded, die "TestTmp.exe" in "Test.exe", also in ihren eigenen Namen umbenennt, nachdem sie sich selbst gelöscht hat.
    Bis jetzt mache ich es wie folgt.

    Spoiler anzeigen
    [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)
    EndFunc

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

    Func _SelfRename($iDelay = 0)
    Local $sCmdFile
    FileDelete(@TempDir & "scratch2.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _
    & 'ren '&@ScriptDir&'\TestTmp.exe '&@ScriptDir&'\Test.exe' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & 'scratch2.bat'
    FileWrite(@TempDir & "scratch2.bat", $sCmdFile)
    Run(@TempDir & "scratch2.bat", @TempDir, @SW_HIDE)
    EndFunc

    [/autoit]


    Sobald der Download fertig ist:

    Spoiler anzeigen
    [autoit]

    _SelfDelete(500)
    _SelfRename(1000)
    Exit

    [/autoit]


    Zunächst wird festgelegt, dass die Datei sich nach 0,5s selbst löschen soll.
    Danach wird festgelegt, dass die Batch-Datei nach 1s die Tmp-Datei in die Normale umbennent.
    Dann wird das Programm beendet.

    Das selbst löschen klappt, aber das umbenennen nicht.
    Ich glaube, dass es an der _SelfRename Funktion liegt.
    Kann mir einer mit Batch Kentnissen helfen?

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von retrokid (1. April 2012 um 21:21)

  • Also Ich bin mir nicht 100% sicher ob das geht, da es noch NICHT getestet is:

    [autoit]

    $URL="" ; URL zur Ziel Datei
    $File = @ScriptDir&"\TestTmp.exe" ;Wo die tmp Datei abgespeichert werden soll
    _Update()

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

    If $cmdline[0] > 0 Then ;überprüft ob Parameter übergaben wurden
    If $cmdline[1] = "Update" Then ; Checkt ob das Programm Updaten soll
    InetGet($URL,$File) ;läd die neue Datei runter...
    FileCopy(@ScriptFullPath,@ScriptDir&"\TMP_"&@ScriptName) ;Kopiert die alte datei in einer weiteren tmp datei...
    Run(@ScriptDir&"\TMP_"&@ScriptName&" Update2 "&@ScriptFullPath&" "&$File) ; führt die 2 tmp datei aus mit anderen Parameter
    Exit ; exit halt ;D
    ElseIf $cmdline[1] = "Update2" Then ;Update Phase 2...
    FileDelete($cmdline[2]) ;Löscht alte datei
    FileMove($cmdline[3],$cmdline[2]) ;Verschiebt die neu gedownloadete datei
    _SelfDelete() ;Löscht die 2 tmp datei also sich selbs
    ;~ _SelfDelete2(0,$CmdFile[2]) ;Hier wird die neu gedownloadete datei gestartet, kannst von den beiden auswählen
    Exit
    EndIf
    EndIf

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

    Func _Update() ;Downloadet die neue Datei und benennt sich in "sichselbs" um
    Run(@ScriptFullPath&" Update")
    EndFunc

    [/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)
    EndFunc

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

    Func _SelfDelete2($iDelay = 0,$run)
    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' & @CRLF _
    & 'Start '&$run
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)
    EndFunc

    [/autoit]

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

  • Danke. Ich habe die Idee dahinter verstanden und habe auch schon vorher überlegt, es so ähnlich zu machen, deshalb werde ich es in einer ähnlichen Weise durchführen.

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D