Batch Datei sich selber kopieren und umbennen lassen?
Hi, ich habe eine Batchdatei (test.bat) geschrieben. Diese soll sich jetzt selber an einen bestimmten Ort kopieren und sich gleichzeitig umbennen in start.bat. bevor jemand fragt warum, des ist nicht einfach zu erklären deswegen führe ich es nicht weiter aus. Hat jmd eine Idee wie das geht? Also der Befehl soll dich dann in der Batch Datei befinden also wenn man diese ausführt, kopiert sie sich zum Beispiel in den Ordner Downloads und nennt sich dann von test.bat in irgendeinen anderen Namen um.
3 Antworten
trivial:
@echo off
rem erstelle Demoumgebung
rem erzeuge Zielordner
md "Zielordner"
rem die ParameterVariable "%~f0" reprässentiert immer die laufende Batch, also sich selbst Demo:
echo "%~f0"
rem jetzt kopieren wir uns selbst in den Zielordner und geben uns einen neuen Namen. ( die extension .bat ist veraltet und birgt bei Ausführung einige tücken... verwende .cmd)
copy "%~f0" "Zielordner\start.cmd"
pause
Falls die Batch am Quellort nicht mehr existieren soll:
@echo off
Move "%~f0" "Zielordner\start.cmd"
rem diese Zeile wird nie ausgeführt werden, da die Batch nun am Quellort nicht mehr existiert.
pause
..stattdessen gibt es eine Fehlermeldung, welche jedoch (bei Ausführung außerhalb der Console nicht mehr gesehen wird.)
Ein ungeregelte Abbruch eines Programms/Batch ist immer unschön, auch wenn man die Fehlermeldung nicht mehr zu sehen bekommt. Hier nuch eine Möglichtkeit für einen Sauberen Abgang, auch wenn sich die Batch bereits selbst gelöscht/entfernt hat:
@echo off
rem fieser Trick
rem ein goto ohne Ziel führt in der Regel zum Abbruch einer Batch, desshalb die Umleitung einer Fehlermeldung
rem allerdings werden Befehle in der gleichen Zeile/Klammerblock noch zu Ende ausgeführt
rem da sowas allerdings Nonsens wäre (nach einem Sprung wird nichts ausgeführt und ein Sprung bricht einen Klammerblock),
rem ist folgendes verhalten einfach als undokumentierte Funktion oder eine Art Easteregg für Programmierer zu werten...
(
rem sprung ohne Ziel
goto 2>nul
rem verschiebe mich selbst /auch Selbstlöschen,-umbennen möglich
move /y "%~f0" "Zielordner\start.cmd"
rem etwas Demo:
echo schau im Exporer ich bin nicht mehr da...
echo ...aber werder trotzdem noch ausgefuehrt...
for /l %%a in (1,1,10) do (
echo %%a missippi
timeout 1 >nul
)
echo ...bin dann mal entgueltig am Ende
pause
)
rem mit dem Schließen der Klammer Endet der Klammerblock/Zeile und damit die Batch ohne Datei...
echo das wird nie ausgeführt werdnen
pause
Naja, die Datei kopieren mit z.B. robocopy und dann die neue Datei umbennen mit ren(=rename).
Mit DOS Befehlen habe ich schon eine Ewigkeit nicht mehr gearbeitet, doch ich glaube du kannst es so lösen
xcopy /m "C:\Users\meinPC\Desktop\test.bat" C:\Zielordner
ren C:\Zielordner\test.bat start.bat