Also, ich habe nochmal nachgesehen. Einer aktuellen, nicht vom Hersteller kommentierten Meldung (Januar 2018) im Forum der Hersteller des XAMPP-Paketes zufolge laufen auch die Kindprozesse deren Apache-Version (angeblich) unter dem Systemkonto. Ergo auch PHP. Ergo wird auch versucht, Deine Batchdatei mit dem Systemkonto zu starten.
Aus diesem Grund dürften die Macher des XAMPP gut beraten sein, PHP das (also das Ausführen eines Skriptes außerhalb des Dokument-Root des Webservers) zu verbieten
exec('start C:\Users\markus\Desktop\server\server.bat');
... sollte verboten sein, wenn C:\Users\markus\Desktop\server nicht das Document-Root ist.
Lese also bitte bei PHP zu exec und safe_mode nach und überprüfe die Konfiguration.
Ich weiß aber nicht, ob das stimmt und auch nicht, ob Du überhaupt den XAMPP hast - oder welche andere Binärversion - andere Distributionen können das (aus gutem Grund) anders machen. Du hast nicht geschrieben, welche Version Du hast - deshalb schaue ich nicht bei den anderen für Dich nach.
Was also bleibt, ist
- im Error-Log nachzusehen;
- robuster zu programmieren (Dein Batch-Skript behauptet zwar, Dateien und Ordner angelegt zu haben, hat das aber nur versucht) und macht im Fehlerfall gar nichts. Es überprüft nicht mal die Existenz von Dateien.
- Dir sehr genau zu überlegen, wieso eigentlich ein Batch-Skript eine Aufgabe erledigen soll, die PHP auch erledigen kann.
- Dir sehr genau zu überlegen, ob es sinnvoll ist, durch den Aufruf einer Webseite Dateien wie "C:\Users\markus\Desktop\server\adminnames.txt" zu lesen, zu ändern, anzulegen oder zu löschen.
Hinzu kommt:
Deine Batch-Datei ist ein "Hupfding". Da wird munter und recht sinnfrei mit GOTO gesprungen. Ein Abschnitt wie MAIN ist, wenn überhaupt verwendet, z.B. stets der Teil, der das gesamte Skript und den Aufruf von anderen Subs steuert.