Batch-Datei lässt sich nur über die Eingabeaufforderung ausführen?
Ich habe eine .bat-Datei erstellt, die funktioniert, wenn ich sie über cmd starte, jedoch nicht funktioniert, wenn ich sie per Doppelklick ausführe. Das cmd-Fenster erscheint zwar kurz und rattert durch, aber es führt die Befehle nicht aus. Das Script besteht nur aus Befehlen zur Erstellung von Symlinks à mklink Verknüpfung Ziel.
Auch als Administrator ausführen hilft nicht. Jemand eine Ahnung, warum?
Ich nutze Windows 10.
2 Antworten
Ohne den Code zu sehen wäre es müßig irgendwelche Vermutungen zu dem Verhalten anzustellen.
Vielleicht wäre es angebracht mal an das Ende der der Batch ein "Pause" zu platzieren, so das du eventuelle Fehlermeldungen sehen kannst?
Wenn Du cmd über Win+R startest und von dort aus die Batch startest, ist der Ordner in welchem die Batch ausgeführt wird selbstverständlich ein anderer als beim Start der Batch per Doppleklick und wiederum ein anderer als beim Start der Batch als Admin.
- Win+R startet cmd.exe im Ordner %userprofile% (c:\users\nutzername)
- ausführen als Administrator startet cmd im Ordner %WINDIR%\system32 (C:\Windows\System32)
- eine per Doppelklick gestartete Batch wird (ohne übergebene Pfad-Parameter) in ihrem Speicher-Ordner ausgeführt. (mit einem Pfad als Parameter) wird die Batch im Ordner der ersten als Parameter übergebenen Datei ausgeführt.
Das bedeutet , je nach Bedingungen, unter welchen Du die Batch startetes können relative Pfade vorhanden sein (oder auch nicht) bzw die Schreibberechtigungen auf Dateien und Ordner können sich ändern.
Sollen relative Pfade verarbeitet werden, so ist es in jedem fall angebracht am Beginn der Batch mit einem cd /d "absoluter Arbeitspfad" festzulegen wo diese auszuführen ist. Soll die Batch garantiert in dem Pfad ausgeführt werden, wo sie gespeichert ist genügt ein:
cd /d "%~dp0"
Hier eine kleine Batch mit der Du mal die oben aufgezählten Szenarien durchspielen kannst.
demo.cmd
@echo off
echo Aufrufordner dieser Batch: "%cd%"
cd /d "%~dp0"
echo Speicher- und Ausfuehrungsort: "%cd%"
pause
Für jemanden der bereits an derartig simplen Regeln scheitert, ist mklink mit Sicherheit kein "netter" Befehl und kann sehr viel Schaden anrichten. Es gibt sehr gute Gründe, weshalb mklink (außer /j) Adminrechte benötigt!
Danke, mit der demo.cmd hab ich den Fehler gefunden
Dieses Verhalten wäre verständlich für den Fall, dass im Batch File nicht alle Dateien und Ordner über absolute Pfade adressiert werden.
Zum Anlegen einer symbolischen Verknüpfung wird das Recht Create Symbolic Link benötigt. Dieses steht standardmäßig nur Benutzern mit Administratorrechten zur Verfügung, nicht aber dem Systembenutzer 'SYSTEM'.
Wahrscheinlich hat es damit zu tun.
Stimmt, es haben die Zugriffsrechte gefehlt, danke ^^
Die Pfade sind absolut. Selbst, wenn das Skript im selben Ordner wie die Verknüpfung und die Zieldatei liegt, funktioniert es nicht.