myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Exe die batch erstellt, die exe und sich selbst löscht (https://mygully.com/showthread.php?t=2768670)

thegreat1rock 03.12.12 22:15

Exe die batch erstellt, die exe und sich selbst löscht
 
hallo erstmal

ich versuch jetzt schon stundenlang eine batch datei zu schreiben, welche ich später zu exe umwandel, welche folgenden plan erfüllt

1. die exe datei zeigt einen text an
2. die exe datei erstellt eine batch datei
3. die exe datei öffnet die batch datei und schließt sich
4. die erstellte batch datei löscht die exe datei
5. die batch datei löscht sich selbst


die exe heißt hallo.exe
un die batch datei heißt new.bat

die batch datei sollte die exe finden egal wo sie ist.


hier is mein bisheriges ergebnis

Code:

@echo off

:informationen
echo hallo
pause


:new batch
cls
        echo>>new.bat @echo off
        echo>>new.bat cls
        echo>>new.bat @for %%i in ("hallo.exe" ) do @del /q "%%i"
        echo>>new.bat del /s /f /q new.bat
new.bat


slahn 03.12.12 22:27

Also da die "exe" ja die "bat" erstellt, kann sie dieser ganz leicht sagen wo sie selbst (also die "exe") ist (also ist da nicht wirklich eine Suche notwendig). Um eine Bat sich selbst löschen zu lassen genügt ein "del %0" (%0 -> enthält den Name mit der die Bat aufgerufen wurde).

fryx 04.12.12 07:18

Code:

@for %%i in ("hallo.exe" ) do @del /q "%%i"
Sollte besser so sein:
Code:

del "hallo.exe" >nul 2>&1
Du müsstest mal sagen, wie dein BAT2EXE tickt, sonst wird es eh' schwierig, die EXE zu löschen.

Code:

del /s /f /q new.bat
besser:
Code:

del /s /f \new.bat >nul 2>&1
.. und damit hast du noch nicht alle LW erfasst, was auch nicht so einfach ist.
/f betrifft den Schreibschutz von new.bat, falls du den aktivierst.
Zur Ausgabe an eine Datei müssen Sonderzeichen escaped werden: ^>
Um was in eine Datei zu schreiben:
Code:

echo something and more >> new.bat
echo my big command ^> infile >> new.bat


slahn 04.12.12 10:55

Da aber diese erste "bat" eh zu einer "exe" werden soll ist der obere Code etwas unnötig und man sollte sich auch nicht zu lange damit aufhalten, diesen auszubessern ...

Hier ist eine Referenzimplementierung in C von mir ... die erstellte "bat" heißt bei mir jedoch genau so wie die "exe" nur mit ".bat" angehängt und befindet sich immer im gleichen Ordner wie die "exe" (es ist wichtig dass die "exe" aufgerufen wird und nicht eine Verknüpfung davon, da sonst die Verknüpfung gelöscht wird)

fryx 04.12.12 11:30

In einer Hochsprache ist das alles easy, Batch erfordert halt Sportsgeist.
Diese Aufgabe ist mit Batch auch sehr leicht zu lösen.

In C#+++ kannst du da gleich noch eine nice GUI bauen, die eine Batch schreibt und sich anschliessend selber löscht.

Na ja, der TE kann ja entscheiden, hat nun die (Aus)Wahl.

slahn 04.12.12 12:16

Ja, bitte nicht falsch verstehen ... ich wollte die Lösung nicht schlecht machen ... ich weiß halt nur nicht warum man sich mit einem Batch-Programm "quält", wenn es ja am ende doch eine "exe" daraus werden soll und kein Skript.

Das C-Programm soll ja auch nur als ein Beispiel für viele herhalten ... Grundsätzlich funktioniert das gewünschte Programm so:

"Creator":
  • Pfad von "Creator" herausfinden
  • "Deleter" erstellen (Übergabe von Pfad des "Creators"
  • "Deleter" ausführen (unabhängig vom "Creator" und gleichzeitig "Creator" beenden)
"Deleter":
  • "Creator"-Pfad erhalten
  • Pfad von "Deleter" herausfinden
  • "Creator" löschen
  • "Deleter" löschen (muss wahrscheinlich gleichzeitig mit dem beenden von "Deleter" passieren)

Man könnte/sollte den "Deleter" so erstellen, dass er so lange mit dem löschen von "Creator" wartet, bis sich "Creator" beendet hat (sonnst muss man den "Creator" gleich nach dem Start von "Deleter" beenden), da sonst ein Löschen nicht möglich ist.

fryx 04.12.12 12:30

Ich dachte, der TS will vllt einen [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]benutzen.

thegreat1rock 04.12.12 13:31

also ich bin nicht wirklich der pro :) ich hab jetzt eure ideen auch ausprobiert, aber klappen tut es irgendwie noch nicht :(

thegreat1rock 04.12.12 13:58

dank für eure hilfe aber ich hab das problem mit etwas rumprobieren selbst lösen können :)

Code:

@echo off


:informationen
echo hallo
pause


:new batch
cls
        echo>>new.bat @echo off
        echo>>new.bat cls
        echo>>new.bat del 010101.txt
        echo>>new.bat del /s /f new.bat
new.bat

es war eig ganz simpel ^^

fryx 04.12.12 15:36

nice game .. :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.