WinFuture-Forum.de: Batch-datei mit Menü Auswahl - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Batch-datei mit Menü Auswahl


#1 Mitglied ist offline   basti2014 

  • Gruppe: Mitglieder
  • Beiträge: 5
  • Beigetreten: 10. Juli 15
  • Reputation: 0

geschrieben 10. Juli 2015 - 19:50

Moin,

habe mir ebend mal ein kleines Batch-script zusammengebastelt und brauche noch zum Abschluss 2 kleine Ergänzungen.

1. Wenn ich eine falche Auswahl treffe soll eine Fehlermeldung kommen.
2. Gross/Kleinschreibung sollte ingnoriert werden.

Ich hoffe das ich hier eine vernünftige klare Antwort bekomme und JA ich habe schon Gegoogelt.

Hier mein Quelltext:

cls
:AUSWAHL

CLS

@echo off
echo             Backup-Skript
echo             =============
echo.

echo   [1] Dateien von DISK nach HDD kopieren
echo   [2] Dateien von HDD nach DISK kopieren
echo.
echo   [q] Programm BEENDEN
echo.
echo.
set asw=0

set /p asw="Bitte Auswahl eingeben: "
 
CLS

if %asw%==1 goto DISKtoHDD
if %asw%==2 goto HDDtoDISK
if %asw%==q goto ENDE


:DISKtoHDD

CLS

copy C:\DISK D:\HDD /-Y
echo Fertig
pause

goto AUSWAHL

:HDDtoDISK

CLS

copy D:\HDD C:\DISK /-Y
echo Fertig
pause


goto AUSWAHL

:ENDE
end



0

Anzeige



#2 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 10. Juli 2015 - 20:03

Willkommen im Forum!

#1:
Einfach nach if %asw%==q goto ENDE dies einfügen:
echo Bitte eine Auswahl treffen&pause&goto :auswahl

#2:
Hinter if einfach ein /i
Also if /i
0

#3 Mitglied ist offline   RalphS 

  • Gruppe: aktive Mitglieder
  • Beiträge: 8.887
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 10. Juli 2015 - 20:27

Du könntest das Menü auch per "choice"-Befehl implementieren. Macht die Sache vielleicht etwas einfacher. Der setzt dann %errorlevel% anhand der Position des gewählten Zeichens in seiner Liste.

"Unzulässige" Antworten werden dann gar nicht erst angenommen.

Wenn Du den Parameter /n mitgibst, verhält sich das nach außen genauso wie Du's jetzt hast.

Dieser Beitrag wurde von RalphS bearbeitet: 10. Juli 2015 - 20:28

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#4 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 10. Juli 2015 - 20:42

Jup, kann ich auch empfehlen.
Funktioniert halt nur by default ab Vista und höher.
0

#5 Mitglied ist offline   RalphS 

  • Gruppe: aktive Mitglieder
  • Beiträge: 8.887
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 10. Juli 2015 - 20:49

:blink: Echt? Das ist doch eigentlich ein uralter DOS-Befehl? Hatten die den aus XP gestrichen? :unsure:

Wieder was gelernt, aber... XP ist alt, und wenn es ab Vista geht, ist das für mich so erstmal okay. :D
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#6 Mitglied ist offline   basti2014 

  • Gruppe: Mitglieder
  • Beiträge: 5
  • Beigetreten: 10. Juli 15
  • Reputation: 0

geschrieben 10. Juli 2015 - 21:44

GROSSES DANKESCHÖN !!

Gibt es auch eine Möglichkeit mit Color XY nur einen Teil zb. nur die Überschrift in einer anderen Farbe darzustellen.
0

#7 Mitglied ist offline   basti2014 

  • Gruppe: Mitglieder
  • Beiträge: 5
  • Beigetreten: 10. Juli 15
  • Reputation: 0

geschrieben 11. Juli 2015 - 10:22

Hallo Leute leider muss das script direkt unter MsDos 6.22 laufen. Leider ist es dort nach dem ausführen nur ein wildes geflackter und man kommt zu keiner Auswahl -> sieht nach einem loop aus.

Habt ihr noch ein Tipp?
0

#8 Mitglied ist offline   RalphS 

  • Gruppe: aktive Mitglieder
  • Beiträge: 8.887
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 11. Juli 2015 - 10:39

Wär nett gewesen, wenn Du das eingangs erwähnt hättest. :wink:

Und ja, da ist eine Schleife drin. DOS 6.x kennt unter anderem SET /P nicht und damit hast Du schon die Schleife, ohne daß Du da groß was dagegen machen könntest. Da mußt Du dann wirklich "choice" nehmen.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#9 Mitglied ist offline   basti2014 

  • Gruppe: Mitglieder
  • Beiträge: 5
  • Beigetreten: 10. Juli 15
  • Reputation: 0

geschrieben 11. Juli 2015 - 12:36

Habe ich in diesem moment nicht dran gedacht. ^^
Könntest du mir ebend helfen das ganze umzubauen nach Choice.



cls
:AUSWAHL
CLS
@echo off
echo.
echo.           				-=COPY-SCRIPT=-
echo.
echo.
echo.============================================
echo.[1] Dateien von DISK nach HDD kopieren
echo.============================================
echo.[2] Dateien von HDD nach DISK kopieren
echo.============================================
echo.[3] Diskkette formatieren
echo.============================================
echo.[b] Programm BEENDEN
echo.============================================
echo.
set asw=0
set /p asw="Bitte Auswahl eingeben: " 
REM CLS
if /i %asw%==1 goto DISKtoHDD
if /i %asw%==2 goto HDDtoDISK
if /i %asw%==3 goto FormatDIKS
if /i %asw%==b goto BEENDEN
echo.
echo.
echo Bitte eine korrekte Auswahl treffen!! 
echo.
echo. &pause&goto :AUSWAHL
:DISKtoHDD
CLS
xcopy C:\DISK\*.* D:\HDD /-Y /E
echo.
echo Fertig
echo. &pause&goto :auswahl
goto AUSWAHL
:HDDtoDISK
CLS
xcopy D:\HDD\*.* C:\DISK /-Y /E
echo.
echo Fertig
echo. &pause&goto :auswahl
goto AUSWAHL

:FormatDIKSDIKS

format A:
echo. &pause&goto :auswahl


:BEENDEN
EXIT
echo



Dieser Beitrag wurde von basti2014 bearbeitet: 11. Juli 2015 - 12:54

0

#10 Mitglied ist offline   RalphS 

  • Gruppe: aktive Mitglieder
  • Beiträge: 8.887
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 11. Juli 2015 - 13:05

Bin da grad nicht zuversichtlich, daß alle "aktuellen" CHOICE-Optionen (und die Implementierung über %errorlevel%) kompatibel mit DOS 6.x ist.

Falls nicht: Choice /? befragen.

Falls ja:
choice /n /c 123b /m "Bitte Auswahl eingeben: "
sollte in etwa leisten, was Du suchst. Das wäre dann anstelle von set /p zu verwenden.

Dabei gibt:
/n kein weiteres Echo aus (unterdrückt die Ausgabe der Auswahlliste);
/c eine geordnete Liste der zulässigen Optionen (hier: 123b);
/m den Benutzerprompt.

Rückgabewert: Position in der Liste in der Variable %errorlevel%. Also 1 für 1, 2 für 2, 4 für b. Falls der Benutzer abbricht (per Crtl-C oder so), kommt 255 hinten raus.

Also am besten den Errorlevel in eine eigene Variable stecken (set ergebnis=%errorlevel%) und das dann abprüfen oder, falls DOS da mitspielt, einfach GOTO Option%ergebnis% und dann Labels Option1 bis Option4 sowie Option255 haben.

Aber wie gesagt, bei DOS 6.x notfalls auf andere Rückgabewerte und Syntax achten.

Dieser Beitrag wurde von RalphS bearbeitet: 11. Juli 2015 - 13:07

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#11 Mitglied ist offline   basti2014 

  • Gruppe: Mitglieder
  • Beiträge: 5
  • Beigetreten: 10. Juli 15
  • Reputation: 0

geschrieben 11. Juli 2015 - 14:21

So habe jetzt folgendes:

Bis jetzt klappt nur Auswahl 1 bei den Restlichen optionen passiert nichts bzw es wir Immer option 1 ausgelöst.

die /m option bei Choice muss unter DOS weggelassen werden
bei Win ist sie nötig sonst flackert es nur


@echo off
echo.
echo Auswahlmenü
echo.
:AUSWAHL
echo.============================================
echo.[1] Dateien von DISK nach HDD kopieren
echo.============================================
echo.[2] Dateien von HDD nach DISK kopieren
echo.============================================
echo.[3] Diskkette formatieren
echo.============================================
echo.[b] Programm BEENDEN
echo.============================================
echo.

choice /n /c:123b "Bitte die entsprechende Zahl drücken: "

if errorlevel 1 goto DISKtoHDD
if errorlevel 2 goto HDDtoDISK
if errorlevel 3 goto FormatDIKSDIKS
if errorlevel b goto BEENDEN



echo.
echo.
echo Bitte eine korrekte Auswahl treffen!! 
echo.
pause
goto AUSWAHL

:DISKtoHDD
CLS
xcopy C:\DISK\*.* D:\HDD /-Y /E
echo.
echo Fertig
echo pause
goto AUSWAHL

:HDDtoDISK
CLS
xcopy D:\HDD\*.* C:\DISK /-Y /E
echo.
echo Fertig
echo 
pause
goto AUSWAHL

:FormatDIKSDIKS

format A:
echo. pause
goto AUSWAHL


:BEENDEN
cls
EXIT




0

#12 Mitglied ist offline   Boadim 

  • Gruppe: Mitglieder
  • Beiträge: 1
  • Beigetreten: 17. April 16
  • Reputation: 0

geschrieben 17. April 2016 - 10:33

Auch wenn es bissel spät für die Antwort ist, aber es gibt bestimmt den Einen oder Andern dem das weiterhilft.

Die Überprüfung des ERRORLEVEL Befehls erfolgt von 255 an abwärts. Desweiteren muss der Buchstabe b mit dem Hexadezimalwert angegeben werden hier dann "11".

Damit nicht immer nur die erste Auswahl getroffen wird muss die Reihenfolge wir folgt sein:


if errorlevel 11 goto BEENDEN
if errorlevel 3 goto FormatDIKSDIKS
if errorlevel 2 goto HDDtoDISK
if errorlevel 1 goto DISKtoHDD
0

#13 Mitglied ist offline   Boernie25 

  • Gruppe: Mitglieder
  • Beiträge: 1
  • Beigetreten: 30. Juli 09
  • Reputation: 0

geschrieben 25. Oktober 2018 - 10:33

 Zitat (Boadim: 17. April 2016 - 10:33)

Auch wenn es bissel spät für die Antwort ist, aber es gibt bestimmt den Einen oder Andern dem das weiterhilft.

Die Überprüfung des ERRORLEVEL Befehls erfolgt von 255 an abwärts. Desweiteren muss der Buchstabe b mit dem Hexadezimalwert angegeben werden hier dann "11".

Damit nicht immer nur die erste Auswahl getroffen wird muss die Reihenfolge wir folgt sein:


if errorlevel 11 goto BEENDEN
if errorlevel 3 goto FormatDIKSDIKS
if errorlevel 2 goto HDDtoDISK
if errorlevel 1 goto DISKtoHDD



Danke, mir hat's gerade geholfen :)
0

#14 Mitglied ist offline   DanielDuesentrieb 

  • Gruppe: aktive Mitglieder
  • Beiträge: 9.318
  • Beigetreten: 15. Januar 06
  • Reputation: 275
  • Geschlecht:Männlich
  • Wohnort:Troisdorf

geschrieben 26. Oktober 2018 - 14:30

Warum so schwierig, wenn das FreeFileSync mittels Batch sogar inkl. Aufgabe möglich ist?!
0

#15 _Osmodia_

  • Gruppe: Gäste

geschrieben 26. Oktober 2018 - 15:22

Beitrag anzeigenZitat (DanielDuesentrieb: 26. Oktober 2018 - 14:30)

Warum so schwierig, wenn das FreeFileSync mittels Batch sogar inkl. Aufgabe möglich ist?!

Was hat das mit der Frage zu tun? Der Sinn der Batch ist doch völlig egal - es ging darum, wie man ein Auswahlmenü realisiert.
1

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0