linuxa
Goto Top

Überprüfung auf genau 4 Chars in Batch

Hallo Zusammen,

ich habe mal wieder eine Batchfrage. Ist es möglich eine Eingabe zu prüfen, ob Sie genau vier Zahlen beinhaltet und wenn nicht, dass er wieder auf die Sprungmarke geht, wo die Eingabe gemacht werden soll?

Hier einmal meinen Code:
:GemiNrCheck
set /p OrderNo=Bitte die Gemini-Nummer eingeben: 
goto LanguagueCheck

Eine kleine Nebenfrage habe ich noch, es taucht immer wieder mal auf, dass es heißt "... kann an dieser Stelle Syntaktisch nicht verwendet werden" - Was genau heißt das? Also was habe ich für einen Fehler gebaut? Leerzeichen?


Vielen Dank für eure Hilfen!

Content-ID: 280240

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

Ausgedruckt am: 08.11.2024 um 15:11 Uhr

rubberman
Lösung rubberman 14.08.2015 aktualisiert um 20:39:41 Uhr
Goto Top
Hallo Panubu.

Kurz und schmerzlos per FINDSTR:
@echo off &setlocal

set "OrderNo="  
set /p "OrderNo=Bitte die Gemini-Nummer eingeben: "  

call :check_four_digits OrderNo
if errorlevel 1 (echo Fehler!) else echo %OrderNo% ist gueltig.

pause
exit /b


:check_four_digits VarName
setlocal EnableDelayedExpansion
echo(!%~1!|findstr /x "[0-9][0-9][0-9][0-9]" >nul && (endlocal &exit /b 0)  
endlocal &exit /b 1

es taucht immer wieder mal auf, dass es heißt "... kann an dieser Stelle Syntaktisch nicht verwendet werden" - Was genau heißt das?
Du verursachst einen Syntaxfehler. Poste den gesamten Code und wie man den Fehler nachstellen kann ...

Grüße
rubberman
Linuxa
Linuxa 14.08.2015 um 19:04:08 Uhr
Goto Top
Super du bist mein Mann! Teste es nachher mal aus. Den Fehler poste ich dann, wenn es nochmal vorkommen sollte.
Linuxa
Linuxa 20.08.2015 aktualisiert um 13:14:47 Uhr
Goto Top
@rubberman

Nun habe ich mal so einen Fehler. Das hier ist mein Code:

@echo off 
FOR /F "tokens=3 delims= " %%G in ('reg query "hklm\system\controlset001\control\nls\language" /v InstallLanguage') DO (  
IF [%%G] EQU [0407] (
	set LangCheck = 1
	
) ELSE (
	set LangCheck = 2
	
)
)

if %LangCheck% == 1 (
			echo German
			Pause
) else if %LangCheck% == 2 (
			echo English
			Pause
)

Der Check der Sprache mithilfe der Reg funktioniert ... nur das untere denke ich mal wieder nicht.
Linuxa
Linuxa 20.08.2015 um 13:16:54 Uhr
Goto Top
Habe es nun selber behoben ... musste bei

set LangCheck = 2 (und 1) das Leerzeichen wegnehmen. Dann ging es. Aber ich dachte das ignoriert er?
rubberman
rubberman 20.08.2015 um 21:20:45 Uhr
Goto Top
Hallo Panubu.

das Leerzeichen wegnehmen
Besser die Leerzeichen wegnehmen (auf beiden Seiten des =)
Aber ich dachte das ignoriert er?
Ich weiß nicht mit welcher Sprache du das verwechselst.

OK lösen wir das Rätsel des Syntaxfehlers. Mit
set LangCheck = 1
definierst du eine Variable mit Name 'LangCheck ' und Wert ' 1' (ohne Apostrophen, aber beachte jeweils die Leerzeichen).
In deinem Vergleich ist also die Variable %LangCheck% gar nicht definiert und wird deshalb zu einem leeren String expandiert. Wenn dass passiert, sieht dein Vergleich wie folgt aus:
if == 1 (
Der erste Vergleichsoperand fehlt, was zum Syntaxerror führt.

Grüße
rubberman