Eine Ja Nein Abfrage in ein Batchdatei integrieren
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 118820
Url: https://administrator.de/contentid/118820
Ausgedruckt am: 15.11.2024 um 13:11 Uhr
23 Kommentare
Neuester Kommentar
Hallo Tobias,
eine gute Antwort, mit einer
Bitte markiere Code mit den entsprechenden Tags. Siehe in der Formatierungshilfe
Eine etwas effizientere Methode um ggfs auch noch mehr Verzweigungen mit einer vorgegebenen Antwort zu erhalten ist
Gruß
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
Eine etwas effizientere Methode um ggfs auch noch mehr Verzweigungen mit einer vorgegebenen Antwort zu erhalten ist
@ECHO OFF
ECHO moechten Sie das wirklich tun? (j / n)
SET /p wahl=
For %%A in (J N) Do if /i '%wahl%'=='%%A' goto :Wahl%%A
Echo Ungueltige Antwort&Pause&Exit /B 1
Goto Ende
:WahlN
echo Sie haben NEIN gedrueckt
goto Ende
:WahlJ
echo Sie haben JA gedrueckt
:Ende
pause
Gruß
@ @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
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!
@ECHO OFF
ECHO moechten Sie das wirklich tun? (j / n)
:Frage
SET /p wahl=
if /i not '%wahl%' == 'n' (if /i '%wahl%' == 'j' (goto Ja ) ) else goto Nein
if defined wahl ECHO Bitte fangen sie keine Unterhaltung an!
ECHO Antworten Sie Bitte nur mit j für Ja oder n für Nein. & goto Frage
:Nein
echo Sie haben NEIN gedrueckt
goto Ende
:Ja
echo Sie haben JA gedrueckt
:Ende
pause
Gruß Phil
[Edit] mist - zu spät [/Edit]
@@77559
wieso dann bei Dir :
Zeile 06. Goto Ende
Zeile 12. :Ende
kannste weglassen
@ 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.
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.
Zitat von @pieh-ejdsch:
@@77559
wieso dann bei Dir :
??????
kannste weglassen
@@77559
wieso dann bei Dir :
Zeile 06. Goto Ende
> Zeile 12. :Ende
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
Gruß
LotPings
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ß
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)
@echo off
rem Abfrage ob Dateien wirklich verschoben werden sollen.
:Frage
echo Moechten Sie wirklich die Runtimedatei auf allen Live-Servern verteilen? (J N)
set /p wahl=
for %%A in (J N) Do if /i '%wahl%'=='%%A' goto Wahl%%A
ECHO Ungueltige Antwort, nur (J N) & goto Frage
:WahlN
echo Sie haben Nein gedrueckt
goto Ende
:WahlJ
rem Überprüfen ob die neuste Exportdatei bereits umbenannt wurde, wenn nicht, dann wird die Umbenennundverschiebe.bat
rem für die TEstumgebung aufgerufen
set s19exconf=\\server0019\shares2\vhv\it_abteilung\Editor_Development\Editor\Server\wd_adware_abo_07\export\exported_configurations
set Editor\Server\Export\exported_configurations
if exist "%s19exconf%\runtime.dux" (
call "%s19exconf%\UmbenennUndVerschiebenachTestLokal.bat"
echo UmbenennUndVerschiebenachTestLokal.bat abgearbeitet
)
rem Datum als Zahl ermitteln(Format MMTTJJJJ)
For /F "tokens=1-7 delims=:/.- " %%a in ("%date%") do set KDATE=%%b%%a%%c
rem Zeit als Zahl ermitteln(Format MMSS)
For /F "tokens=1-2 delims=:/.-, " %%a in ("%time%") do set KTIME=%%a%%b
rem Timestamp erzeugen
set TIMESTAMP=%KDATE%%KTIME%
rem Verschieben umbenennen der Dateien auf den Servern in das Altverzeichnis und Kopieren der neuen Datei
rem Testserver
For %%A in (server00ss server0044 server0043) DO (
move "\\%%A\%edconf%\adware_abo_07.dux" "\\%%A\%edconf%\alte_dux_dateien\%TIMESTAMP%adware_abo_07.dux"
copy "%s19exconf%\adware_abo_07.dux" "\\%%A\%edconf%\"
echo adware_abo_07.dux wurde auf %%A kopiert
)
echo.
echo Sie haben nun die Dateien auf den Servern Verteilt.
echo.
echo Bitte starten Sie die Server server00ss, server0043 und server0044 neu
:Ende
pause
exit
Gruß
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ß
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)
for %%B in (
sedemune00ss
sedemune0044
sedemune0043
) do move "\\%%B\%sspfadexp%\adware_abo_07.dux" "\\%%B\%sspfadexp%\alte_dux_dateien\%TIMESTAMP%_adware_abo_07.dux" &&(copy "\\%s19exconf%\adware_abo_07.dux" "\\%%B\%sspfadexp%\" & echo adware_abo_07.dux wurde auf %%B kopiert)
Gruß
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
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.
for %%B in (sedemune00ss sedemune0044 sedemune0043
) do move "\\%%B\%sspfadexp%\adware_abo_07.dux" "\\%%B\%sspfadexp%\alte_dux_dateien\%TIMESTAMP%_adware_abo_07.dux" &&(
copy "\\%s19exconf%\adware_abo_07.dux" "\\%%B\%sspfadexp%\"
echo adware_abo_07.dux wurde auf %%B kopiert
)
Gurß
LotPings
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
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
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
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
Danke für die beiden Tipps!
Ist eh richtig denn der Spruch:
Ich werd mal überlegen ob mein Perfektionismus das aushalten kann
Wenn nicht, dann werd ich mal bei Bill Steward vorbeischauen...
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 !"Wenn der Benutzer nicht innerhalb von 3 Sec den Nein-Button drückt, dann drücke ich für ihn den
Ja-Button".
Ich werd mal überlegen ob mein Perfektionismus das aushalten kann
Wenn nicht, dann werd ich mal bei Bill Steward vorbeischauen...
Hallo Biber,
der Wunsch ging ja eher in Richtung "kein Enter",
den Timeout mit Default muss man ja nicht benutzen.
Gruß
LotPings
der Wunsch ging ja eher in Richtung "kein Enter",
den Timeout mit Default muss man ja nicht benutzen.
Gruß
LotPings
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...
Grüße
Biber
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...
Grüße
Biber
@MrComp
oder
Beides gleichermassen case "insensitive"
fk
choice /c jn /M "Ihre Antwort"
if errorlevel 1 (
echo Ja
) else (
echo Nein
)
oder
set /p answer=Ihre Antwort [j/n]
if /i "%answer%" == "j" (
echo Ja
) else (
echo Nein
)
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
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.