Eine Ja Nein Abfrage in ein Batchdatei integrieren

keiosid
Goto Top
Hallo,

ich möchte mit einer Batchdatei bestimmte Dateien auf verschiedene Server kopieren.

Das Skript zum kopieren, umbenennen, löschen und verschieben der Dateien ist kein Problem.

Allerdings möchte ich nach dem Start des Skripts noch einmal eine Abfrage einbauen, ob der User das tatsächlich machen will.

Die Abfrage sollte etwa so ausseheh:

"Sind Sie sicher, dass Sie die Dateien auf den live-Servern austauschen wollen? (J/N)"


Ist das möglich?

Danke
Grüße
KeiosID

Content-Key: 118820

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

Ausgedruckt am: 14.08.2022 um 01:08 Uhr

Mitglied: derschakal83
derschakal83 23.06.2009 um 10:05:37 Uhr
Goto Top
Hallo,

probier mal das hier:

@echo OFF
ECHO moechten Sie das wirklich tun? (j / n)
SET /p wahl=
if '%wahl%' == 'n' goto Nein
if '%wahl%' == 'j' goto Ja
Goto Ende
:Nein
echo Sie haben NEIN gedrueckt
goto Ende
:Ja
echo Sie haben JA gedrueckt
:Ende
pause


Gruß Tobias
Mitglied: KeiosID
KeiosID 23.06.2009 um 10:29:06 Uhr
Goto Top
Danke,

sieht gut aus und funktioniert.

Grüße

KeiosID
Mitglied: 77559
77559 23.06.2009 um 11:02:23 Uhr
Goto Top
Hallo Tobias,

eine gute Antwort, mit einer if /i Abfrage wäre es zusätzlich von der Groß-/Kleinschreibung unabhängig.
Bitte markiere Code mit den entsprechenden Tags. Siehe in der Formatierungshilfe Quellcode, Code oder HTML Snippets

Eine etwas effizientere Methode um ggfs auch noch mehr Verzweigungen mit einer vorgegebenen Antwort zu erhalten ist

Gruß
Mitglied: pieh-ejdsch
pieh-ejdsch 23.06.2009 um 11:10:44 Uhr
Goto Top
@ @derschakal83

auweia!!!

was ist wenn gar nix oder anderes gedrückt wird?
oder Großbuchstaben?
...dann läuf die batch Trotzdem weiter! (goto Ende)
Der Anwender denkt dann ja alles OK wurde gemacht oder halt nicht gemacht.
Ohne diese Meldung steht der Anwender in der Suppe!

Würde ich grundlegend so bewerkstelligen!


Gruß Phil

[Edit] mist - zu spät [/Edit]
@@77559

wieso dann bei Dir :
??????
kannste weglassen
Mitglied: derschakal83
derschakal83 23.06.2009 um 12:13:26 Uhr
Goto Top
@ phil:
warum denn gleich so arrogant? ("auweia!!!")

Die Aufgabe die er an das Programm gestellt hat, würde genau erfüllt. Außerdem läuft das Programm nicht weiter, falls man eine Taste drückt - sondern springt zum Ende und wird einfach beendet ("Goto Ende" hinter dem IF)

Er scheint ja außerdem das Programm für sich selbst zu entwickeln, ich behaupte mal da braucht man nicht unbedingt auf "Super-DAU"-freundliche Lösung.

Trotzdem danke für die Verbesserungsvorschläge an euch beide.
Mitglied: 77559
77559 23.06.2009 um 12:26:03 Uhr
Goto Top
Zitat von @pieh-ejdsch:
@@77559
wieso dann bei Dir :
??????
kannste weglassen

Da ist eine pause in 13 damit man die Meldung auch lesen kann.
Ansonsten hätte ich gleich Goto :eof genommen.

Aber Du hast trotzdem Recht, aber aus einem anderen Grund: Zeile 06 wird durch den Exit am Ende von Zeile 05 niemals erreicht.
Das kommt wenn nachträglich im Code rumpfuscht face-wink

Gruß
LotPings
Mitglied: KeiosID
KeiosID 23.06.2009 um 13:05:18 Uhr
Goto Top
Hi Leute,

vielen Dank für die weiteren ANregungen und Hilfen. Diese werden nun auch noch miteingearbeitet.

In der Tat wäre es blöd, wenn die files unbeabsichtigt verteilt werden würden. Das käme unter Umständen einem Supergau gleich...

Grüße vom Batchnoob, der trotzdem Batch zusammenfrickelt.
KeiosID

PS.: Wenn ich das script fertig habe, stelle ich es mal ein
Mitglied: KeiosID
KeiosID 23.06.2009 um 15:55:59 Uhr
Goto Top
so, hier noch das fertige Werk

Mitglied: 77559
77559 23.06.2009 um 16:26:26 Uhr
Goto Top
Hallo KeiosID,

lange Pfade würde ich immer in Anführungszeichen setzen und ich würde um Redundanz zu vermeiden und die Batchdatei lesbarer zu machen Schleifen benutzen und lange (gleiche) Pfade/-bestandtteile aus Variablen lesen.
Dies sollte von der Funktion identisch sein ( natürlichungetestet)

Gruß
Mitglied: KeiosID
KeiosID 26.06.2009 um 11:24:06 Uhr
Goto Top
Hallo LotPing,

die Lösung mit den Variablen und vorallem mit der ForSchleife gefällt mir sehr gut,
auch in der Richtung hin, dass ich das Script noch für ca. 10 weitere Files anpassen mus.

Allerdings funktioniert bei mir die For Schleife nicht richtig, kannst Du hier einen Fehler erkennen?


Grüße

KeiosID
Mitglied: 77559
77559 26.06.2009 um 12:27:41 Uhr
Goto Top
Hallo KeiosID,

Das /D gehört da nicht hin, dies ist die einfache Form des For-Befehl.
Das Verschieben und dann umbenennen macht IMO keinen Sinn, das geht in einem Schritt.

Hier mal eine andere Formatierung und copy nur wenn move erfolgreich war (ungetestet)

Gruß
Mitglied: KeiosID
KeiosID 26.06.2009 um 14:31:24 Uhr
Goto Top
Hallo LotPings,
danke für die Hilfe, nun arbeitet es auch.

Nun noch ein paar Fragen zum Verständniss

Müssen hier die Werte untereinander angeordnet sein?


Und bei dem Part mit "do", müssen hier die verschiedenen Aufgaben mit && und & verknüpft sein? Darf man das nicht in einer Klammer zusammenfassen?

Danke

Grüße
KeiosID
Mitglied: 77559
77559 26.06.2009 um 14:41:40 Uhr
Goto Top
Das kann man genausogut hintereinande schreiben.
Ich "schrub" doch eine andere (alternative) Formatierung.

Das && bedeutet das der folgende Bereich in Klammern nur ausgeführt wird wenn der Move erfolgreich war.
Hinter öffnenden oder vor schließenden Klammern kann man immer in eine neue Zeile wechseln ohne das die Logik hiervon beeinflusst wird.

Diese Version ist von der Funktion her absolut identisch.

Gurß
LotPings
Mitglied: pbelcl
pbelcl 12.12.2010 um 13:25:03 Uhr
Goto Top
Hi Leute,

Danke für diesen Beitrag, er hat mir sehr geholfen!
Abschliessend eine Frage dazu:

Gibt es auch eine Möglichkeit diese Frage einzubauen OHNE sie mit einem ENTER bestätigen zu müssen?
Eventuell auch über ein Zusatztool??

das wär dann nicht nur perfekt, sondern GENIAL face-wink
Mitglied: 77559
77559 13.12.2010 um 08:39:40 Uhr
Goto Top
Hallo pbelcl,
Microsoft'scher Unentschlossenheit ist es zu verdanken,
das nicht ALLE DOS-/Windows-Versionen den für dein Vorhaben geeigneten CHOICE Befehl kennen.

Eine Alternative ist Choose von Bill Stewart das es als Real-Mode Dos und in 32/64 Bit Versionen für Windows gibt.

Gruß
Lotpings
Mitglied: Biber
Biber 13.12.2010 um 09:12:39 Uhr
Goto Top
Moin pbelcl,

ergänzend zu LotPings' Aussage und Hinweis:

Ja, stimmt, die Redmonder Hobbycoder haben das CHOICE-Utility irgendwann mal weggelassen.

Allerdings in diesem Fall IMHO zu Recht.
Es ist seit ein paar Jahren wirklich nicht mehr hip oder trendy irgendwo die Logik einzubauen
"Wenn der Benutzer nicht innerhalb von 3 Sec den Nein-Button drückt, dann drücke ich für ihn den Ja-Button".

Das machen vielleicht noch einige Dialer oder Klingelton-an-Kiddies-Verticker... aber es braucht auch wirklich sonst kein Mensch.

Lass es einfach weg... auch wenn ich sonst durchaus Bill Stewarts Site empfehlen kann.

Grüße
Biber
Mitglied: pbelcl
pbelcl 13.12.2010 um 18:42:16 Uhr
Goto Top
Danke für die beiden Tipps!

Ist eh richtig denn der Spruch:
Zitat von @Biber:
"Wenn der Benutzer nicht innerhalb von 3 Sec den Nein-Button drückt, dann drücke ich für ihn den
Ja-Button"
.
hat mich nicht nur zum Lachen gebracht, sondern ist auch wahr !

Ich werd mal überlegen ob mein Perfektionismus das aushalten kann face-wink
Wenn nicht, dann werd ich mal bei Bill Steward vorbeischauen...
Mitglied: 77559
77559 14.12.2010 um 12:45:59 Uhr
Goto Top
Hallo Biber,

der Wunsch ging ja eher in Richtung "kein Enter",
den Timeout mit Default muss man ja nicht benutzen.

Gruß
LotPings
Mitglied: Biber
Biber 14.12.2010 um 13:19:14 Uhr
Goto Top
Moin LotPinx,

ja, da habe ich zu flüchtig gelesen.
Pavlovscher Reflex... immer, wenn eine/r CHOICE.com ausgräbt, dann klickert es bei mir in Richtung "Default nach 3 Sek".

Also das ENTER einsparen will er...?

Dazu im Batch in das SET /P-Feld einfach 2087 Zeichen eingeben.. dann geht es ohne ENTER weiter.

Solche verwöhnte Konsumküken... früher haben wir Bätsche noch auf dem Lochkartenstanzer getippt... face-wink

Grüße
Biber
Mitglied: MrComp
MrComp 13.02.2016 um 15:38:05 Uhr
Goto Top
Kann man das auch so programmieren, dass man nur die Taste drücken muss?
Wäre nämlich sehr nützlich, vor allem wenn man das nur drücken müsse, anstatt dass man das eingeben und dann Enter drücken, außerdem kann man sich so nicht mit Groß- und Kleinschreibung vertun

LG Comp
Mitglied: 126919
126919 13.02.2016 aktualisiert um 15:51:59 Uhr
Goto Top
@MrComp

oder

Beides gleichermassen case "insensitive"

außerdem kann man sich so nicht mit Groß- und Kleinschreibung vertun
Bei einem IF mit Parameter /i ist das wurst...

fk
Mitglied: RycoDePsyco
RycoDePsyco 26.04.2017 um 16:28:34 Uhr
Goto Top
Vielen Dank für die letzten Scrips, die haben sehr geholfen.

Eine Frage hätte ich, wie kann zum Text "Ihre Antwort" ein Zeilenumbruch eingefügt werden?
Gibt es da ein Befehl?

...
Ihre
Antwort [J/N]
...

Vielen Dank für die Hilfe.
Mitglied: 77559
77559 29.04.2017 um 23:11:48 Uhr
Goto Top
Eine Frage hätte ich, wie kann zum Text "Ihre Antwort" ein Zeilenumbruch eingefügt werden?
Der Sinn von set /p ist ja gerade keinen Zeilenwechsel zu erzeugen.
Es wird deshalb ja auch häufig miss-/gebraucht.
Einfach ein Echo mit dem Prompt-Text voranstellen und hinter dem Gleich-Zeichen leer lassen bzw. bei choice kein /M setzen.