1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Batch Code Hilfe

Discussion in 'Programmieren' started by Dome94, Apr 21, 2009.

Thread Status:
Not open for further replies.
  1. Dome94

    Dome94 Byte

    Hi @ all
    ich habe ein kleines Prog mit Batch geschrieben
    leider funktioniert etwas bei dem Script nicht
    wenn ich bei dem Menü etwas anderes als die definierten Zahlen eingebe wird immer Laufwerk A angesprochen:


    HTML:
    @echo off
    
    
    set /p input=CD Verwaltungsprogramm v1.0
    if exist %C:\Windows\System32\eject.exe goto start
    echo Datei nicht gefunden - eject.exe
    goto copy
    
    :copy
    set /p input=Druecken sie Enter um eject.exe in C:\Windows\system32 zu kopieren
    copy Data\eject.exe C:\Windows\System32
    echo Datei kopiert - eject.exe
    goto start
    
    :start
    
    echo -------------------
    echo Whaele das Laufwerk
    echo [1] A
    echo [2] D
    echo [3] F
    echo [4] G
    echo [5] H
    echo [6] Explorer
    echo [0] Exit
    echo -------------------
    
    set /p choice=Eingabe:
    if %choice% == 1 goto A
    if %choice% == 2 goto D
    if %choice% == 3 goto F
    if %choice% == 4 goto G
    if %choice% == 5 goto H
    if %choice% == 0 goto 0
    if %choice% == 6 goto 6
    
    
    :A
    eject A
    echo A - offen
    goto start
    
    :D
    eject D
    echo D - offen
    goto start
    
    :F
    eject F
    echo F - offen
    goto start
    
    :G
    eject G
    echo G - offen
    goto start
    
    :H
    eject H
    echo H -offen
    goto start
    
    :0
    exit
    
    :6
    Explorer.exe
    goto start
    
    
    kann man das irgendwie beheben?
    Danke im vorraus
    mfg Dome94

    PS:
    die exe zum öffnen von Laufwerken einfach in system32 kopieren http://www.freeware.de/download/eject_25250.html
     
    Last edited: Apr 21, 2009
  2. AS_X

    AS_X Halbes Megabyte

    Ist ja klar eigentlich:

    Code:
    if %choice% == 1 goto A
    if %choice% == 2 goto D
    if %choice% == 3 goto F
    if %choice% == 4 goto G
    if %choice% == 5 goto H
    if %choice% == 0 goto 0
    if %choice% == 6 goto 6
    
    
    :A
    eject A
    echo A - offen
    goto start 
    
    Wenn der Vergleich für die Zahlen 0-6 fehlschlägt, wird der Abschnitt A ausgeführt, weil es da eben textuell weitergeht.

    Nach der letzten Abfrage solltest du ein goto einfügen, damit die Ausführung dort weitergeht, wo du möchtest.

    Code:
    if %choice% == 6 goto 6
    goto start
    
    :A
    eject A
     
  3. Dome94

    Dome94 Byte

    danke für die schnelle Antwort
    dann kann man es nicht beheben?
     
  4. AS_X

    AS_X Halbes Megabyte

    Ich hab doch geschrieben, wie es behoben wird. Oder was meinst du mit beheben? Du solltest vielleicht auch mal sagen, was passieren soll, wenn eine andere Taste gedrückt wird!

    :teach: Anforderung
     
  5. Dome94

    Dome94 Byte

    ok danke habs jetzt
    wenn eine andere Taste gedrückt wird:

    if %choice% == x goto 10

    :10
    echo Falsche Eingabe
    goto start

    thx
     
  6. AS_X

    AS_X Halbes Megabyte

    Verstehe ich zwar jetzt nicht, aber wenn es so geht, sei's drum.
    Du musst eigentlich keine weitere Abfrage von %choice% machen, weil alle vorigen fehlschlagen.
     
  7. nosti89

    nosti89 Megabyte

    Kannst auch nen Errorlevel nehmen.....

    MfG
     
  8. AS_X

    AS_X Halbes Megabyte

    Nur aus Interesse: Wie das? Tritt ja kein Fehler auf.
     
  9. VB-Coder

    VB-Coder Megabyte

    ist zwar nicht das schönste an Code aber funktioniert

    Code:
    @echo off
    
    
    set /p input=CD Verwaltungsprogramm v1.0
    if exist %C:\Windows\System32\eject.exe goto start
    echo Datei nicht gefunden - eject.exe
    goto copy
    
    
    :copy
    set /p input=Druecken sie Enter um eject.exe in C:\Windows\system32 zu kopieren
    copy Data\eject.exe C:\Windows\System32
    echo Datei kopiert - eject.exe
    goto start
    
    :start
    
    echo -------------------
    echo Whaele das Laufwerk
    echo [1] A
    echo [2] D
    echo [3] F
    echo [4] G
    echo [5] H
    echo [6] Explorer
    echo [0] Exit
    echo -------------------
    
    set /p choice=Eingabe:
    if %choice% == 1 goto A
    if %choice% == 2 goto D
    if %choice% == 3 goto F
    if %choice% == 4 goto G
    if %choice% == 5 goto H
    if %choice% == 0 goto 0
    if %choice% == 6 goto 6
    [COLOR=Red]if not %choice% == 0 if not %choice% == 1 if not %choice% == 2 if not %choice% == 3 if not %choice% == 4 if not %choice% == 5 if not %choice% == 6 goto X
    [/COLOR]
    :A
    eject A
    echo A - offen
    goto start
    
    :D
    eject D
    echo D - offen
    goto start
    
    :F
    eject F
    echo F - offen
    goto start
    
    :G
    eject G
    echo G - offen
    goto start
    
    :H
    eject H
    echo H -offen
    goto start
    
    :0
    exit
    
    :6
    Explorer.exe
    goto start
    
    [COLOR=Red]:X
    echo Falsche Eingabe
    goto start[/COLOR]
    
    Zur Erklärung:

    Die IF NOT Abfragen hintereinander geschaltet bewirken eine Art UND Verknüpfung.
    Sprich also wenn eine andere Taste wie 0 1 2 3 4 5 oder 6 gedrückt werden springt das Script zu :X , gibt die Meldung aus und wechselt wieder zu :start
     
  10. kazhar

    kazhar Viertel Gigabyte

    deine tolle if not abfrage (so sie funktioniert) ist doch automatisch erfüllt, in dem augenlick in dem sie aufgerufen wird...
     
  11. VB-Coder

    VB-Coder Megabyte

    Wieso ist die IF NOT automatisch erfüllt ?
    Wenn du der IF NOT nicht mitteilst was nicht ist, dann IF NOT Null bzw. IF NOT Leerzeichen. Deshalb sagen wir der IF NOT ja das CHOISE nicht 0 , nicht 1, nicht 2 usw ist ... und wenn dem so ist, dann gehe zu X

    Eventuell verstehe ich aber einfach auch nur nicht was du mir damit sagen willst @ kazhar
     
  12. kazhar

    kazhar Viertel Gigabyte

    wenn irgend eine der oben genannten bedingungen erfüllt wäre (zeichen ist entweder 1, 2, 3, 4, 5, 6 oder 0) würde die zeile nicht aufgerufen, weil die patch per goto rausspringt ;)
     
  13. AS_X

    AS_X Halbes Megabyte

    Ob sie es verstehen, wenn du es ihnen erklärst... ? :cool:
     
  14. VB-Coder

    VB-Coder Megabyte

    Soweit so klar ... ähm gut ;)

    Nur ist die Bedingung nicht erfüllt soll ja auch was passieren
    Demzufolge die IF NOT
    Nur wenn ich der IF NOT keine Bedingungen gebe, heißt das die IF NOT würde nur reagieren, wenn entweder ein NULL oder Leerzeichen kommt.
    Bei jeder anderen Bedingung (wenn ich A , B , X , 9 oder sonstwas drücke) würde die IF NOT einfach durchlaufen und da hier keine Regel existiert, würde sich das Script ohne Meldung beenden. Oder sehe ich da was falsch ?
     
  15. AS_X

    AS_X Halbes Megabyte

    Dann wird die Ausführung hinter dem letzten if fortgesetzt. Alles, was du dahin schreibst, wird dann ausgeführt:

    Code:
    ...
    set /p choice=Eingabe:
    if %choice% == 1 goto A
    if %choice% == 2 goto D
    if %choice% == 3 goto F
    if %choice% == 4 goto G
    if %choice% == 5 goto H
    if %choice% == 0 goto 0
    if %choice% == 6 goto 6
    [B]echo Falsche Eingabe
    goto Start[/B]
    
    A:
    ...
    
    Ausprobieren, staunen und sich wundern...

    Bei einem if in jeder Programmiersprache brauchst du ja die gegenteilige/n Bedingung/en nicht nachprüfen, wenn du sowieso die Ausführung nicht fortsetzt (z.B. return im if-Teil).

    Code:
    if (test == null) return;
    if (test != null) { [COLOR="Red"]// unnötiges if, weil an der Stelle klar ist, das test != null[/COLOR]
    ...
    }
    
    Das hat man jetzt von der GOTO-Programmierung: Spaghetti-Code. :teach:
     
    Last edited: Apr 22, 2009
  16. VB-Coder

    VB-Coder Megabyte

    Ja okay manchmal sieht man den Wald vor lauter Bäumen nicht und ich lasse mich ja gerne eines besseren belehren.

    Also könnte man sagen funktioniert beides, auch wenn deine Lösung die Elegantere ist ;)
     
  17. AS_X

    AS_X Halbes Megabyte

    Wenn wir schon so diskutieren, dann noch eins: Das unnötige Abfragen von Bedingungen verpulvert natürlich (in dem Fall allerdings vernachlässigbar) Rechenleistung.
     
  18. Urs2

    Urs2 Megabyte

    Man könnte auch noch die Systemzeit in einer neuen TXT-Datei speichern lassen...
    ...und diese TXT anschliessend gleich wieder löschen... damit kein Müllhaufen entsteht...

    Gruss Urs
     
  19. Dome94

    Dome94 Byte

    Danke an alle:bet:

    bin endlich fertig mit dem coden^^

    Code:
    @echo off
    
    
    set /p input=CD Verwaltungsprogramm v1.0 - Enter
    
    
    
    if exist %C:\Windows\System32\eject.exe goto start
    echo Datei nicht gefunden - eject.exe
    goto Error
    
    :Error
    cls
    sounder.exe Progs\Data\beep1.wav
    echo C:\Windows\System32\eject.exe - Datei nicht gefunden
    echo -------------------------------------------------
    echo [1] eject.exe kopieren
    echo [2] Hauptmenue
    echo -------------------------------------------------
    
    set /p choice=Eingabe:
    if %choice% == 1 goto 1
    if %choice% == 2 goto 2
    
    
    :1
    :copy
    set /p input=Druecken sie Enter um eject.exe in C:\Windows\system32 zu kopieren
    copy Progs\Data\eject.exe C:\Windows\System32
    echo Datei kopiert - eject.exe
    cls
    goto start
    
    :2
    echo Hauptmenue
    cls
    goto start
    
    
    
    :start
    cls
    
    sounder.exe Progs\Data\beep1.wav
    
    
    echo CD Verwaltungsprogramm v1.0
    echo -------------------------------------------------
    echo Whaele das Laufwerk
    echo [1] A
    echo [2] D
    echo [3] F
    echo [4] G
    echo [5] H
    echo -------------------------------------------------
    echo [6] Explorer
    echo [7] CD zu (all)
    echo [8] CD auf (all)
    echo [9] Eject.exe - kopieren/Befehl (wird benoetigt)
    echo [10] Hilfe
    echo [11] Eject.exe loeschen
    echo [0] Exit
    echo -------------------------------------------------
    
    set /p choice=Eingabe:
    if %choice% == 1 goto A
    if %choice% == 2 goto D
    if %choice% == 3 goto F
    if %choice% == 4 goto G
    if %choice% == 5 goto H
    if %choice% == 0 goto 0
    if %choice% == 6 goto 6
    if %choice% == 7 goto 7
    if %choice% == 8 goto 8
    if %choice% == 9 goto copy
    if %choice% == 10 goto 11
    if %choice% == 12 goto 10
    if %choice% == 13 goto 10
    if %choice% == 14 goto 10
    if %choice% == 15 goto 10
    
    if not %choice% == 0 if not %choice% == 1 if not %choice% == 2 if not %choice% == 3 if not %choice% == 4 if not %choice% == 5 if not %choice% == 6 if not %choice% == 7 if not %choice% == 8 if not %choice% == 9 if not %choice% == 10 if not %choice% == 11 if not %choice% == 12 if not %choice% == 13 if not %choice% == 14 if not %choice% == 15 goto 10
    
    
    :A
    eject A
    echo A - offen
    cls
    goto start
    
    :D
    eject D
    echo D - offen
    cls
    goto start
    
    :F
    eject F
    echo F - offen
    cls
    goto start
    
    :G
    eject G
    echo G - offen
    cls
    goto start
    
    :H
    eject H
    echo H -offen
    cls
    goto start
    
    :7
    start Progs\Data\CDZU.exe
    echo CD Laufwerk zu
    cls
    goto start
    
    :8
    start Progs\Data\CDauf.exe
    echo CD Laufwerk auf
    cls
    goto start
    
    :6
    Explorer.exe
    echo Explorer
    cls
    goto start
    
    :10 
    sounder.exe Progs\Data\error2.wav
    echo Falsche Eingabe
    cls
    goto start
    
    :0
    exit
    
    :copy
    set /p input=Druecken sie Enter um eject.exe in C:\Windows\system32 zu kopieren
    copy Data\eject.exe C:\Windows\System32
    echo Datei kopiert - eject.exe
    cls
    goto start
    
    :11
    cls
    
    sounder.exe Progs\Data\beep1.wav
    echo -------------------------------------------------
    echo Hilfe:
    echo Wenn die CD Laufwerke sich nicht oeffnen
    echo musst du eject.exe in system32 kopieren.
    echo CD auf und CD zu wirkt sich auch auf 
    echo virtuelle Laufwerke aus.
    echo -------------------------------------------------
    echo [1] eject.exe kopieren
    echo [2] Hauptmenue
    echo -------------------------------------------------
    
    set /p choice=Eingabe:
    if %choice% == 1 goto 1
    if %choice% == 2 goto 2
    
    :1
    :copy
    set /p input=Druecken sie Enter um eject.exe in C:\Windows\system32 zu kopieren
    copy Data\eject.exe C:\Windows\System32
    echo Datei kopiert - eject.exe
    cls
    goto start
    
    :2
    echo Hauptmenue
    cls
    goto start
    
    if not %choice% == 1 if not %choice% == 2 goto 10
    
    :10 
    sounder.exe Progs\Data\error2.wav
    echo Falsche Eingabe
    cls
    goto start
    
    :12
    
    sounder.exe Progs\Data\beep1.wav
    echo -------------------------------------------------
    echo [1] Eject.exe loeschen
    echo [2] Hauptmenue
    echo -------------------------------------------------
    
    set /p choice=Eingabe:
    if %choice% == 1 goto 1
    if %choice% == 2 goto 2
    
    :1
    :copy
    set /p input=Druecken sie Enter um eject.exe in C:\Windows\system32 zu loeschen
    sounder.exe Progs\Data\beep.wav
    del C:\Windows\System32\eject.exe
    echo Datei geloescht - eject.exe
    cls
    goto start
    
    :2
    echo Hauptmenue
    cls
    goto start
    
    
    if not %choice% == 1 if not %choice% == 2 goto 10
    
    :10 
    sounder.exe Progs\Data\error2.wav
    echo Falsche Eingabe
    cls
    goto start
    
    
    mfg dome94
     
  20. AS_X

    AS_X Halbes Megabyte

    :grübel: Versteh das einer...
     
Thread Status:
Not open for further replies.

Share This Page