Eingabeaufforderung mehrfach öffnen?

3 Antworten

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.

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

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.


Zoro01 
Beitragsersteller
 03.02.2020, 12:30

Sie sollen offen bleiben

0