Eingabeaufforderung mehrfach öffnen?
Ist es irgendwie möglich die Eingabeaufforderung durch ein Befehl oder irgendwie automatisch mehrfach zu öffnen.
Für alle Klugscheißer die sagen das ich es manuell öffnen kann... Dankeschön für die info.
Da ich aber eine größere Anzahl brauche ist manuell keine Option.
Frage 2.
Ist es möglich in diese mehrfach geöffneten Eingabeaufforderungen direkt mit einemal den selben Befehl auszuführen?
Danke für jede hilfreiche Antwort
3 Antworten
![](https://images.gutefrage.net/media/user/Erzesel/1497339133085_nmmslarge__0_524_1080_1080_4b38ff31970de3b94deb6a27ca8a8f01.jpg?v=1497339133000)
Ein paar Consolfenster parralel zu öffnen ist trivial:
demo1.cmd
@echo off
rem 5 Eingabefenster parallel öffnen
for /l %%a in (1,1,5) do (
start "Eingabe %%a" cmd /k
)
pause
in diese einen Befehl einzugeben und mit Enter diesen Auszuführen ist auch einfach.
Das diese Fenster nach der Eingabe auf einen gemeinsamen "Startschuss" warten sollen ist nicht Vorgesehen ...
...aber Machbar.
Batch hat keinen Ereignishandler, um Prozesse zu synchronisiern und automatisierte Signale zu empfangen. dazu muss man sich schon etwas einfallen lassen.
Um es einfach zu halten verteile ich das ganze auf Zwei Batches eine für die Eingabe , welche auf ein Ereignis wartet (Slave.cmd) und eine (Master.cmd), welche mehrere Instanzen von Slave.cmd startet und deren Ausführung steuert.
Slave.cmd
@echo off
chcp 65001 >nul & rem Umlaute erlauben
echo mache hier Deine Eingabe und drücke Enter.
echo das Programm wartet auf die Aktivierung durch die Eingabe von X im Masterfenster!
set /p "Makro=Deine Eingabe bitte >"
rem EreignisHandler (führt solange eine Warteschleife aus, bis von Master die Datei "start.flag" erzeugt wurde, auch das ist ein Ereignis!)
echo Warte...
:WaitLoop
rem jeweils 1 Sekunde warten, bis die (Nicht)Existenz der Datei abgefagt wird (sonst erfolgt alle paar Millisekunden eine Abfrage, was definitiv zu jeder Menge Überlast führt)
Timeout 1 >nul
if not exist "start.flag" goto :WaitLoop
echo hier würde "%Makro%" ausgeführt!
rem die Doppelpunkte vor der Variable verhindern die Ausführung des Makros
::%Makro%
echo Ende Slave ich schließe das Fenster 10 Sekunden!
timeout 10 >nul
...in dieser Form wird die Eingabe nicht ausgeführt sondern nur angezeigt. durch entfernen der Doppelpunkte vor der variable %Macro% wird deren Inhalt auch ausgeführt, als hättest Du diesen im echten Prompt eingegeben.(nur eben auf einen gemeinsamen Startschuss.)
Master. cmd
@echo off
chcp 65001 >nul & rem Umlaute erlauben
Title Master
rem 3x "Slave.cmd" parallel starten
for /l %%a in (1,1,3) do (
start "Eingabe %%a" cmd /c "slave.cmd"
)
echo Bitte die Taste x drücken um die Eingaben in den Slavefenstern auszuführen!
choice /c:x
rem erzeuge leere Datei "start.flag"
(call)>"start.flag"
rem warte 3 Sekunden, damit auch jeder Slave die Nachricht sieht
timeout 3 >nul
rem aufräumen... "start.flag" löschen.
del /q "start.flag"
pause
- Starte einfach Master. Dieser Startet die vorgegebene Anzahl Slaves (Diener).
- In diesen kannst du etwas eingeben
- danach warten die Slaves bis du im Masterfenster x drückst (und "start.flag" erzeugt wurde) .
- Du kannst auch "Slaves" von Hand starten und etwas eingeben, auch diese warten brav bis du in einem Masterfenster X drückst (oder von Hand eine Datei Namens "start.flag" anlegst
- Das ist eigentlich der primitivste Eventhandler, den man sich vorstellen kann.
Theoretisch könnte man auch das drücken von x durch eine Nachricht von jedem Slave ersetzen das die Eingabe erledigt ist. sozusagen wechselseitige Kommunikation... aber das dürfte dann wohl doch etwas zu weit gehen...
Normalerweise bräuchte ich auch keine 2 Batchdateien. Für einen Anfänger würden selektive Selbststarter zu unübersichtlich.
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Sicher ist dies auch automatisch möglich. Um die cmd mehrfach zu starten benutzt du wie bereits erwähnt am besten ein "for"-Konstrukt.
cmd.exe hat einige parameter, die genutzt werden können. Für dich wäre -c oder -k interessant. Welches davon für dich passt hängt davon ab, ob die cmd nach ausführen des Befehls geschlossen werden soll, oder geöffnet bleibt.
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
Gib einfach im cmd
start cmd
ein
Sie sollen offen bleiben