Bat Datei die sich selbst in den Autostart Ordner kopiert?
Hallo ich bin Anfänger in Sachen nach ich habe eine Datei namens test.bat und würde gern wissen wie ich machen kann das sie sich selbst in den Autostart Ordner kopiert
2 Antworten
Eigenartiges Vorhaben, Du wirst aber vermutlich schon wissen warum Du willst, dass die Datei sich selbst kopiert (und nicht Du das aktiv tust)?
Den Pfad zum Autostart Ordner kennnst Du, sonst hättest Du gefragt "wo finde ich den ..."? Oder ist das dann die nächste Frage?
Die Variable %0 einer Batchdatei enthält den Namen der aufgerufenen Batchdatei, die Variablen %1, %2, ... die Übergabeparameter.
- test.bat aaa --> in %0 steht test.bat, in %1 steht aaa
Problem: In %0 steht exakt das, was Du als Parameter 0 angegeben hast.
- test aaa --> in %0 steht test, in %1 steht aaa
Für das Kopieren benötigst den vollständigen Namen, den bekommst Du über
- %~f0
Folgende Anweisung in der Batchdatei kopiert diese als zum Autostart Ordner:
- copy %~f0 C:\Users\XXXXXX\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Statt XXXXXX musst Du natürlich den richtigen Usernamen einsetzen!
copy /y "%0" "%USERPROFILE%\..."
(Autostartordner bitte selbst raussuchen)
copy /y "%~0" "%USERPROFILE%\..."
Die Tilde ist wichtig. Sie entfernt mögliche Quotes um den Dateinamen.
...sonst könntest du Quotes um Quotes haben. ""C:\pfad\meine Batch.cmd"" ...das geht schief...
Echt...ich muss zugeben ich lag falsch😥 (wann ruft man schon mal eine Batch auf, welche nicht im aktuellen Verzeichnis ist) ---im allgemeinen wird eine Batch einfach angeklickt und oder als Droptarget für andere Dateien benutzt , wobei immer automatisch der volle Pfad übergeben wird.
Allerdings ist es eher unwahrscheinlich, das eine Batch ohne Pfadangabe aus einem anderen Verzeichnis heraus aufgerufen wird.
C:\Users\Erzesel Secure\Desktop>%temp%\test
iam C:\Users\ERZESE~1\AppData\Local\Temp\test
C:\Users\Erzesel Secure\Desktop>%temp%\test.bat
iam C:\Users\ERZESE~1\AppData\Local\Temp\test.bat
C:\Users\Erzesel Secure\Desktop>cd "%temp%"
C:\Users\ERZESE~1\AppData\Local\Temp>test
iam test
C:\Users\ERZESE~1\AppData\Local\Temp>test.bat
iam test.bat
Bei der Verwendung als Droptarget, bei welchem auch Dateien aus anderen Laufwerken und Verzeichnissen auf die Batch gezogen werden , war es schon immer zweckmäßig das Batchverzeichnis als Arbeitsverzeichnis festzulegen.
cd /d "%~dp0"
...da auch andere Dateien im Batchverzeichnis involviert sein können und cmd automatisch zum Pfad der gedropten Dateien wechselt.
oder man verwendet brav "%~f0" oder "%~dpnx0"
Zugegeben... ich hatte in 30 Jahren nie eine Situation, in welcher %0 nichtmehr im Relativen aktuellen Pfad verfügbar war... (sonst wäre mir die skurrile Situation sicher aufgefallen)
Wenn er zum Ausführen seiner "test.bat" nur "test" eintippt (das .bat weglässt), wird das Batchprogramm korrekt gestartet. Das kopieren wird jedoch in die Hose gehen, weil dann in "%0" nur "test" steht (die Datei "test" wird der copy Befehl nicht finden)!
Das kopieren wird jedoch in die Hose gehen, weil dann in "%0" nur "test" steht
Quatsch... %0 bzw. "%~0" enthält immer den vollen Pfad, egal wie die Batch aufgerufen wurde...
Wer sicher gehen möchte kann ja %~f0 oder %~s0 (8.3pfad ---immer ohne Sonderzeichen) verwenden.
Es ist zwar unwahrscheinlich, aber nicht unmöglich, dass das Home-Verzeichnis nicht auf derselben Partition liegt wie das System. %userprofile% statt C:\Users\<username> funktioniert auch dann.
(Und Anführungszeichen um die Pfade und Dateinamen setzen)