Batch Datei sich selber kopieren und umbennen lassen?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Naja, die Datei kopieren mit z.B. robocopy und dann die neue Datei umbennen mit ren(=rename).


ArduinoGeek 
Beitragsersteller
 03.11.2020, 16:04

Danke ich Versuchs mal

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