Batch if variable fehler?

...komplette Frage anzeigen

4 Antworten

Hier mal eine ordentliche Version:

@echo off
setlocal

set /p x="Film starten ([J]a/[N]ein)? "
if /i "%x%"=="j" goto a
if /i "%x%"=="n" goto b
goto :eof

:a
start image_film.avi
mkdir "%HOMEDRIVE%\\\\%HOMEPATH%\\\\desktop\\\\ImageFilm"
copy "image_film.avi" "%HOMEDRIVE%\\\\%HOMEPATH%\\\\desktop\\\\ImageFilm\\\\"
goto :eof

:b
echo.Schade :(
pause
goto :eof

Oder auch anstatt SET die CHOICE-Variante:

@echo off
setlocal

choice /m "Film starten "
if errorlevel 255 goto x
if errorlevel 2 goto b
if errorlebel 1 goto a
goto :eof

:a
start image_film.avi
mkdir "%HOMEDRIVE%\\\\%HOMEPATH%\\\\desktop\\\\ImageFilm"
copy "image_film.avi" "%HOMEDRIVE%\\\\%HOMEPATH%\\\\desktop\\\\ImageFilm\\\\"
exit /b 0

:b
echo.Schade :(
timeout /t 10
exit /b 1

:x
for /L %%C in (1,1,3) do (color & color 4f)echo.Abbruch!
timeout /t 10
exit /b 130

Hierbei brauchst Du nicht mit [Enter] bestätigen. Die [J,N]-Tasten werden automatisch angezeigt. Der ERRORLEVEL 255 bedeutet [STRG]+[C] wurde gedrückt, was dem normalen System-Exit-Code 130 entspricht.

TIMEOUT ist wie PAUSE nur mit einem Countdown.

Die EXIT-Befehle hierbei liefern einen ERRORLEVEL nach Beendigung der Batch. Auf diese Weise könntest Du nachher feststellen, welche Taste gewählt wurde. Das ist hier nur Spielerei, um es Dir mal zu zeigen. Das obere "GOTO :EOF" reicht völlig.

Du solltest Dir übrigens besser angewöhnen Pfade IMMER in doppelte Anführungszeichen zu setzen. Falls in %HOMEPATH% ein Leerzeichen ist, bekommst Du Datei- und Syntax-Fehler.

Mann, Mann, Mann … ich muss wirklich große Langeweile haben …  ;)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Rafael20002000
19.05.2017, 19:09

Du hast einen extremen Anfänger supportet danke xD

0

Du bist immer bei a gelandet, weil die " bei deinem if gefehlt haben, wie du schon richtig herausgefunden hast. Dabei dürfte dir aber auch aufgefallen sein, dass, wenn du weder j noch n eintippst du immer zu :a kommst. 

Hier mal etwas angepasst:

@echo off

:frage
color f0
echo Film starten?
echo [j]a [n]ein

set /p "eingabe= > "
if /i "%eingabe%"=="j" goto startFilm
if /i "%eingabe%"=="n" goto ende color fc
echo Nur [j] oder [n] als Eingabe zugelassen. timeout /t 2 >nul cls goto frage

:startFilm
start image_film.avi
mkdir %HOMEDRIVE%\\\\%HOMEPATH%\\\\desktop\\\\ImageFilm
copy image_film.avi %HOMEDRIVE%\\\\%HOMEPATH%\\\\desktop\\\\ImageFilm\\\\
exit

:ende
echo Schade
pause >nul
exit




Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von MarkusGenervt
20.05.2017, 00:35

Und mit CHOICE kannst Du Dir diese Schleife und (ohne CLS) die zusätzlichen Ausgabe-Zeilen sparen und die vorherige Anzeige bleibt (bei Bedarf) erhalten.

Denn CHOICE piepst einfach bei falscher Eingabe und es passiert nichts. Da kommst Du dann nur noch mit [STRG]+[C] raus. Deshalb gibt es dann auch den Exitcode 255, um auch diese Option abzufangen.

Übrigens überschreibt EXIT (ohne Parameter) den letzten ERRORLEVEL mit "0" (entspricht "EXIT /B 0"). Wenn man aber "GOTO :EOF" befiehlt, dann bleibt ggf. der letzte ERROLEVEL erhalten. Hier wäre das ggf. bei COPY wichtig.

1
Kommentar von MarkusGenervt
20.05.2017, 00:42

Dieser Befehl ist unnötig:

set /p "eingabe= > "

Wenn ich mich gerade nicht täusche sogar falsch, aufgrund der Umleitung ">".

Das geht hierbei so:

set /p eingabe=" > "
1

vergesst es schon selbst gefixt. Der gefixte code sieht so aus:

@echo off

echo Film starten?
echo [j]a [n]ein

set /p x=
if "%x%"=="j" goto a
if "%x%"=="n" goto b
pause

:a
start image_film.avi
mkdir %HOMEDRIVE%\\\\%HOMEPATH%\\\\desktop\\\\ImageFilm
copy image_film.avi %HOMEDRIVE%\\\\%HOMEPATH%\\\\desktop\\\\ImageFilm\\\\
exit

:b
echo Schade :(
pause
exit
Antwort bewerten Vielen Dank für Deine Bewertung

Ähm sorry für die Frage auf die Frage, aber was genau hast du geändert?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von MarkusGenervt
19.05.2017, 00:00

Er hat die Anführungszeichen in den IF-Befehlen für die X-Variable vergessen.

0
Kommentar von Starshipper24
20.05.2017, 09:19

Achso😂 OK Danke! LG

0

Was möchtest Du wissen?