retschef
Goto Top

Batch - Wenn nichts geschrieben dann aktualisieren

Hi Community ,

Vorneweg:
Ich habe hier im Fourm schon viele Fragen nachgeschaut.
Es ist echt sehr hilfreich hier und es ist echt gut das einem immer geholfen wird.

Nun habe ich aber eine Frage die (hoffentlich) noch nicht beantwortet wurde.
Und zwar habe ich folgendes Problem:

Ich will das wenn man "nichts" (nicht das Wort nichts) bei dieser Benutzereingabe:

set /p var="nichts"

eingibt das eine Aktion ausgeführt wird.
Es soll jede Sekunde überprüft werden ob etwas eingegeben wurde.

Also wenn Batch warten soll macht man das ja mit :

ping -n 2 127.0.0.1>nul

das weiß ich schon. Nur wie verbindet man das?
Oder wird das anders gemacht?

Ist das mit batch überhaupt möglich?

Ich hoffe es war verständlich.
Danke schonmal für die Hilfe

MFG
Retschef

Content-Key: 142845

Url: https://administrator.de/contentid/142845

Printed on: April 16, 2024 at 07:04 o'clock

Mitglied: 60730
60730 May 14, 2010 at 16:04:18 (UTC)
Goto Top
Servus,

ich verstehe deine Frage nicht so ganz, denn /p wartet doch eh, bis etwas mit einem abschliessenden Return eingegeben wurde.
Das 1 sekunde "warten" ist also eher - wenn ich dich richtig verstanden habe - sinnbefefreit.

:var
set /p var="nichts"  
if  "%var%" == "" goto var  

Gruß
Member: rubberman
rubberman May 14, 2010 at 16:05:34 (UTC)
Goto Top
Hallo Retschef,

willkommen im Forum.

SET /P wartet auf eine Benutzereingabe, in der Zwischenzeit läuf der Batch nicht weiter. Das bedeutet, so einfach wird das nicht. Erkläre doch mal, was du damit vorhast. Mglw. gibt es eine andere Alternative.


Grüße
rubberman
Member: Retschef
Retschef May 14, 2010 at 16:11:09 (UTC)
Goto Top
Hi,

Habe ich mich wohl nicht gut ausgedrückt.^^

Gut, ich wollte eben das es NICHT unendlich wartet sondern nach 2 sekunden merkt das nichts eingegeben wurde.
Dann soll es eine Aktion ausführen.

Aber anscheinend geht das mit diesem code nicht.
Hoffe ihr habt jetzt verstanden was ich meine.

-"Mglw. gibt es eine andere Alternative."
Ich hoffe doch.

MFG
Retschef
Member: rubberman
rubberman May 14, 2010 at 16:18:21 (UTC)
Goto Top
Hallo Retschef,

da leider immer noch nicht klar ist, WOZU du so etwas benötigst, kann ich vorerst nur den CHOICE - Befehl in den Raum werfen. Hier kannst du einen Defaultwert festlegen, der nach einer bestimmten Wartezeit übernommen wird. Geht aber nur mit einem einzelnen Character.

Grüße
rubberman
Member: bastla
bastla May 14, 2010 at 16:31:27 (UTC)
Goto Top
Hallo Retschef und willkommen im Forum (und natürlich: Hi Timo und rubberman)!

Auch ich würde es für sinnvoll halten, Dein Vorhaben etwas ausführlicher zu beschreiben ...

Bis dahin noch eine andere, allerdings noch weiter eingeschränkte und auch nicht so richtig hybsche Möglichkeit: eine VBS-Krücke der Art
@echo off & setlocal
set G=%temp%\GetAnswer.vbs
>%G% echo WScript.Echo WScript.CreateObject("WScript.Shell").Popup("Soll die ...-Aktion ausgeführt werden?",2,"Ihre Entscheidung",vbYesNo+vbQuestion)  
for /f %%i in ('cscript //nologo %G%') do set Wahl=%%i  
if %Wahl%==-1 echo Keine Antwort ist auch eine Antwort ...
if %Wahl%==6 echo OK, machen wir's ...  
if %Wahl%==7 echo Na gut, dann nicht ...
(Eigentlich einziger) Vorteil dieser Variante wäre, dass Du mit Bordmitteln auskommen kannst ...

Grüße
bastla
Member: Retschef
Retschef May 14, 2010 at 17:01:26 (UTC)
Goto Top
Also gut ich versuchs nochmal diesmal vlt. mit etwas mehr Kontext ^^

Es soll so laufen:

1. Ich schreibe etwas mit dem "set /p" in die Batch.
2. Dies wird dann mit "echo >>" in eine Textdatei geschrieben.
3. Dann soll der Text der in der Textdatei steht (wurde ja bei 2. in diese Datei geschrieben) wieder in der Batch erscheinen.

Das mache ich mit "type".

Sieht dann ungefähr so aus:

set /p var= Text
Echo var >> \\MEIN-PC\Ordner1\Textdatei.txt
cls
type \\MEIN-PC\Ordner1\Textdatei.txt

Klappt auch alles ganz super.
Jetzt wird der Text mit "type" ja nur aktualisiert wenn ich das so durchlaufen lasse.

Nur jetzt will ich das der Text mit "type" aktualiesiert wird OHNE das ich etwas eingegeben habe.
Der Text soll sich alle 2 sekunden (oder andere Zeit) aktualiesieren.

Also im Prinzip alle 2 Sekunden soll "type \\MEIN-PC\Ordner1\Textdatei.txt" ausgeführt werden.
Wärend ich noch was schreiben kann, mit "set /p"

MFG
Retschef
Mitglied: 77559
77559 May 14, 2010 at 17:30:12 (UTC)
Goto Top
Hallo Retschef.

Auch von mir ein Willkommen im Forum.

Solange nicht von anderer Seite ebenfalls etwas in die Datei geschrieben wird,
macht doch der Refresh keinen Sinn solange du auf einen User Input wartest?

Wie der Name Batch schon sagt ist das für die stapelweise Bearbeitung gedacht,
nicht um interaktive Dinge zu steuern.

Gruß
LotPings
Member: Retschef
Retschef May 14, 2010 at 17:33:58 (UTC)
Goto Top
hi,

"Solange nicht von anderer Seite ebenfalls etwas in die Datei geschrieben wird,
macht doch der Refresh keinen Sinn solange du auf einen User Input wartest?"

---Schon wenn ein zweiter gleichzeitig auf die Batch Datei zugreift.(z.B. von einem anderen Pc)

"Wie der Name Batch schon sagt ist das für die stapelweise Bearbeitung gedacht,
nicht um interaktive Dinge zu steuern."

---Heist das dass es nicht möglich ist?
Danke für die vielen Antworten!

MFG
Retschef
Member: bastla
bastla May 14, 2010 at 17:39:50 (UTC)
Goto Top
Hallo @all!

So, wie sich das entwickelt, würde ich es mit 2 Batches versuchen (bei den heutigen Bildschirmgrößen passen die beiden Fenster vermutlich auch schön nebeneinander face-wink):
::Anzeigen.cmd
@echo off & setlocal
:Loop
cls
type \\MEIN-PC\Ordner1\Textdatei.txt 2>nul
ping -n 2 localhost>nul
goto :Loop
und
::Eingabe.cmd
@echo off & setlocal
start Anzeigen
:Loop
set "var="  
set /p var=Eingabe: 
if defined var >>\\MEIN-PC\Ordner1\Textdatei.txt echo %var%
goto :Loop
Für das Beenden muss ja wohl nicht groß vorgesorgt werden ...

Grüße
bastla
Member: rubberman
rubberman May 14, 2010 at 17:53:50 (UTC)
Goto Top
Hallo zusammen,

in leichter Abwandlung könnte man auch Leerzeilen erzeugen.
Zeile 7 der Eingabe.cmd:
>>\\MEIN-PC\Ordner1\Textdatei.txt echo.%var%
Der Punkt machts.

Sollten die Fenster doch zu groß werden, lassen sie sich durch
mode con cols=X lines=Y
in Anzahl der Spalten (X) und Zeilen (Y) begrenzen.

Grüße
rubberman
Member: Retschef
Retschef May 14, 2010 at 18:03:38 (UTC)
Goto Top
Thx,
Stimmt auf die Lösung mit 2 Batches bin ich noch nicht gekommen.

"if defined var >>\\MEIN-PC\Ordner1\Textdatei.txt echo %var% "

Verstehe ich leider nicht ganz was bewirkt das genau?^^

und wozu ist im 2. Abschnitt die 5. Zeile gut?
Wird die Variable nicht in der 6.Zeile bestimmt?

danke für die Lösung ich werde gleich ausprobieren obs so geht und euch bescheid sagen ;)

MFG
Retschef
Member: bastla
bastla May 14, 2010 at 18:10:59 (UTC)
Goto Top
Hallo Retschef!

Die Zeilen 5 bis 7 sollen bewirken, dass bei einer "leeren" Eingabe (also nur "Enter" gedrückt) nicht die vorherige Zeile wiederholt (dazu wird die Variable %var% in Zeile 5 gelöscht) und auch keine Leerzeile geschrieben wird (dazu die Überprüfung mit "if defined") - die Möglichkeit, durch eine solche "leere" Eingabe eine Leerzeile zu erzeugen, hat rubberman ja schon gezeigt.

Grüße
bastla
Member: Retschef
Retschef May 14, 2010 at 19:18:30 (UTC)
Goto Top
Hi,

Es läuft alles einwandfrei jetzt!
(fast) Genauso habe ich mir das vorgestellt!^^

Und das mit der Leerzeile klappt bei mir auch ohne Punkt wenn ich einfach :

\\MEIN-PC\Ordner1\Textdatei.txt echo.%name%: %var%

mache kommt das raus:

Mein Name: Hallo

THX !

MFG
Retschef
Member: bastla
bastla May 14, 2010 at 19:25:12 (UTC)
Goto Top
Hallo Retschef!
Und das mit der Leerzeile klappt bei mir auch ohne Punkt
... aber nur, weil Du eben keine "leere" Zeile erzeugst ...

Anyhow, schön dass es jetzt passt. face-smile

Grüße
bastla