Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Prüfen ob Variablen inhalt Buchstaben enthält

Frage Entwicklung Batch & Shell

Mitglied: IForever

IForever (Level 1) - Jetzt verbinden

19.12.2014, aktualisiert 20.12.2014, 1687 Aufrufe, 7 Kommentare

Hallo administrator.de!

Ich habe ein kleines Logikproblem, welches ich gerne lösen, bzw. erklärt haben möchte, sollte es so gar nicht funktionieren können :p

Ich habe eine Batch in der man verschiedene Uhrzeiten eintragen kann.
Und da man mit einem durchschnitts IQ von 10 bei den meisten Anwendern rechnen muss, möchte ich auch die Benutzereingaben überprüfen.

Die Eingabe erfolgt im Format SS:MM (07:12), einige Fehler habe ich schon abgefangen, der der mich ins grübeln bringt, ist folgender:
Ich möchte prüfen, ob Buchstaben verwendet worden sin. Sprich: "ab:cd"

Mein Coding sieht folgendermaßen aus:
- Variable "come" ist die eingetragene Zeit
- In ":come" wird diese eingetragen, daher das goto zurück

:: 03 Keine Buchstaben
01.
for %%a in ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i" "J=j" "K=k" "L=l" "M=m" 
02.
	  "N=n" "O=o" "P=p" "Q=q" "R=r" "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z") DO (SET "come=!come:%%~a!") 
03.
		 
04.
for %%a in ("a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" 
05.
	  "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z") DO ( 
06.
	if "%come:~0,1%"=="%%a" ( 
07.
	                  echo Die Zeitangabe ist nicht korrekt! 
08.
		echo Fehler 03: Keine Buchstaben verwenden! 
09.
		goto :come 
10.
11.
	if "%come:~1,1%"=="%%a" ( 
12.
		echo Die Zeitangabe ist nicht korrekt! 
13.
		echo Fehler 03: Keine Buchstaben verwenden! 
14.
		goto :come 
15.
16.
	if "%come:~3,1%"=="%%a" ( 
17.
		echo Die Zeitangabe ist nicht korrekt! 
18.
		echo Fehler 03: Keine Buchstaben verwenden! 
19.
		goto :come 
20.
21.
	if "%come:~4,1%"=="%%a" ( 
22.
		echo Die Zeitangabe ist nicht korrekt! 
23.
		echo Fehler 03: Keine Buchstaben verwenden! 
24.
		goto :come 
25.
26.
	)
Mein Gedanke war es, alle Großbuchstaben in kleine zu konvertieren und dann zu prüfen, ob sich diese in meiner Variable befinden.
In den 4 FOR Prüfungen werden die jeweils 4 Stellen der Zeit (der : ausgenommen) geprüft, ob ein Buchstabe verwendet wurde.

Kann diese Konstellation aus FOR und IF überhaupt funktionieren?
Wenn ja, wo liegt mein Fehler?

Gruß und Danke im Vorraus
Chris
Mitglied: 114757
19.12.2014, aktualisiert um 19:21 Uhr
Hallo Chris,
machs doch so:
echo %come%|findstr /ir "^[0-2][0-9]:[0-5][0-9]$" && echo Uhrzeit OK || echo Uhrzeit nicht OK
Dann schlägst du mehrere Fliegen mit einer Klappe. Nun gut wenn eine Uhrzeitangabe größer als 23 in den Stunden ist das musst du noch prüfen, denke aber das solltest du dann auch selber schaffen

Gruß jodel32


p.s. Zur Info: If kennt auch den Schalter /i (steht für "insensitive") dann ist Groß- oder Kleinschreibung beim Vergleich kein Thema mehr

p.s. stell auf Powershell um, damit ist das ebenfalls ein Klacks ...
01.
$result = Read-Host "Geben sie die Uhrzeit ein" 
02.
if ($result -match '^([0-1][0-9]|2[0-3]):[0-5][0-9]$'){ 
03.
  Write-Host "Uhrzeit OK!" 
04.
}Else{ 
05.
  Write-Host "Uhrzeit FALSCH!" 
06.
}
Bitte warten ..
Mitglied: rubberman
19.12.2014 um 23:28 Uhr
Hallo Chris,

jodel32 hat grundsätzlich Recht. Eigentlich suchst du nach einer Lösung um zu prüfen, ob die Eingabe ein vorgegebenes Format hat. Dass dort keine Buchstaben enthalten sein dürfen, ist nur die halbe Miete. Ebenso wenig dürfen irgendwelche anderen Zeichen, als Nummern und ein Doppelpunkt vorhanden sein oder die numerischen Teile einen bestimmten Wert über- oder unterschreiten.

Wenn man wirklich die unmöglichsten Eingaben des DAUs abfangen will, wird das in Batch tatsächlich eine Herausforderung. Dabei rede ich bspw. von Zeichen wie <>|& oder unpaarigen Anführungszeichen.

Du kannst ja mal mit folgendem Codeschnipsel gegen derartige Eingaben testen:
01.
@echo off &setlocal 
02.
set /a "inp=0, err=0, SS=0, MM=0" 
03.
 
04.
set /p "inp=SS:MM> " 
05.
 
06.
setlocal EnableDelayedExpansion 
07.
for /f "tokens=1* delims=:" %%i in ("!inp!") do ( 
08.
  if "%%i:%%j" neq "!inp!" (endlocal &set /a "err |= 1") else endlocal 
09.
  set "SS=1%%i" 
10.
  set "MM=1%%j"  
11.
12.
 
13.
call :checkUnsigned SS 100 123 
14.
set /a "err |= %errorlevel%" 
15.
 
16.
call :checkUnsigned MM 100 159 
17.
set /a "err |= %errorlevel%" 
18.
 
19.
if %err%==1 (echo Fehler) else echo OK 
20.
pause 
21.
exit /b 
22.
 
23.
 
24.
:checkUnsigned VarName Min Max 
25.
setlocal EnableDelayedExpansion 
26.
:: Test auf Ziffern (keine anderen Zeichen erlaubt). 
27.
for /f "delims=1234567890" %%i in ("!%~1!") do (endlocal &exit /b 1) 
28.
:: Test auf gültige Zahl (alles was SET /A fehlerfrei verarbeiten kann). 
29.
2>nul set /a "dummy=!%~1!" || (endlocal &exit /b 1) 
30.
:: Test auf Dezimalzahl (keine Oktalzahl durch vorangestellte 0). 
31.
if "!%~1!" neq "%dummy%" (endlocal &exit /b 1) 
32.
:: Test auf Minimum 
33.
if %dummy% lss %~2 (endlocal &exit /b 1) 
34.
:: Test auf Maximum 
35.
if %dummy% gtr %~3 (endlocal &exit /b 1) 
36.
 
37.
endlocal &exit /b 0
Grüße
rubberman
Bitte warten ..
Mitglied: miniversum
20.12.2014 um 10:28 Uhr
Hallo,

hier mal mein kurzer Vorschlag wie es auch zu lösen wäre:
01.
@echo off 
02.
set /p come=Zeit: 
03.
 
04.
set hh=%come:~0,2% 
05.
set dp=%come:~2,1% 
06.
set mm=%come:~3,2% 
07.
 
08.
set hhout=%hh% 
09.
set /a hhout=%hh% 
10.
if [%hh%] neq [%hhout%] echo %hh% ist keine Zahl 
11.
 
12.
set mmout=%mm% 
13.
set /a mmout=%mm% 
14.
if [%mm%] neq [%mmout%] echo %mm% ist keine Zahl 
15.
 
16.
if [%dp%] neq [:] echo %dp% ist kein ":" 
17.
 
18.
echo [%hhout%][%dp%][%mmout%]
Gruß
...
Bitte warten ..
Mitglied: rubberman
20.12.2014, aktualisiert um 12:31 Uhr
Hallo miniversum.

Joa, geht schon, aber Chris traut seinen Usern nur einen IQ von 10 zu
Dein Script wertet Eingaben, wie
^1:22
1&:22
11:222
11:73
als perfekt in Ordnung. Dafür
01:22
als fehlerhaft, was in Ordnung sein sollte.
Fehler wie
&1:22
werden nicht abgefangen und
"1:22
stirbt einfach wegen Syntaxfehler Batch ist schon etwas speziell ...

Grüße
rubberman
Bitte warten ..
Mitglied: miniversum
20.12.2014 um 12:47 Uhr
Hallo,

Das ist halt ne schnelle Lösung.
Ich weiß ja nicht wofür es gut sein soll aber das sind dann anwendungsfällt indenen ich sowieso auf temporäre vbs scripte zurückgreigen würde. Die kannman ja in der Batch selbst erzeugen.

Gruß
...
Bitte warten ..
Mitglied: rubberman
20.12.2014, aktualisiert um 15:05 Uhr
Auch 'ne Möglichkeit.
Hier mal als Batch-JScript-Hybrid:

*.bat
01.
@if (@a)==(@b) @end /* JScript Kommentar einleiten. 
02.
 
03.
@echo off &setlocal 
04.
set /p "inp=SS:MM> " 
05.
cscript //nologo //e:jscript "%~fs0" inp 
06.
if errorlevel 1 (echo Fehler) else echo OK 
07.
pause 
08.
exit /b 
09.
 
10.
:: Ende JScript Kommentar. */ 
11.
var str = WScript.CreateObject("WScript.Shell").Environment("PROCESS")(WScript.Arguments.Item(0)); 
12.
var regex = new RegExp("^[0-2]\\d:[0-5]\\d$"); 
13.
var d = new Date("01/01/1970, " + str); 
14.
if ( 
15.
  !regex.test(str) 
16.
  || Object.prototype.toString.call(d) != "[object Date]" 
17.
  || isNaN(d.getTime()) 
18.
) { 
19.
  WScript.Quit(1); 
20.
21.
WScript.Quit(0);
Batch pur läuft natürlich trotzdem schneller als solche Konstrukte

Grüße
rubberman
Bitte warten ..
Mitglied: colinardo
20.12.2014, aktualisiert um 21:23 Uhr
und noch als Ergänzung zu @114757's Powershell-Code, hier noch die Integrierung dessen in eine Batch:
01.
@echo off 
02.
set /p come=Uhrzeit eingeben: 
03.
for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -command "& {if('%come%' -match '^([0-1]\d|2[0-3]):[0-5]\d$'){echo OK}else{echo FEHLER}}"') DO @( 
04.
  if "%%a" == "OK" ( 
05.
     echo Uhrzeit OK 
06.
  ) else ( 
07.
     echo Uhrzeit FALSCH 
08.
09.
)
Dann haben wir jetzt bald alles durch, und der TO hat die Qual der Wahl

Frohes Fest *<(:--)
Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Variable auf Inhalt prüfen
gelöst Frage von PinkFLuffyUnicornBatch & Shell1 Kommentar

Hi, ich sitze jetzt schon den halben tag daran eine if schleife zu erstellen die mir sagt ob Variable ...

Batch & Shell
Batch: Wenn Buchstaben im Wort enthalten dann......
gelöst Frage von Luckyman7471Batch & Shell7 Kommentare

Hallo Leute, Ich würde gerne folgendes realisieren: Wenn im lokalen Computernamen die Buchstaben "fa" enthalten sind dann soll ein ...

Batch & Shell
Variable enthält nur den letzten Wert
gelöst Frage von Phill93Batch & Shell4 Kommentare

Hallo, bin hier gerade am verzweifeln. Ich möchte einen Variable auf das vorkommen eines bestimmten Strings prüfen. Das klapp ...

Batch & Shell
Inhalt einer .csv mit PowerShell prüfen
gelöst Frage von Memo66Batch & Shell10 Kommentare

Hallo zusammen, ich bin noch bisschen am hin und her überlegen wie ich das Problem am besten löse: Ich ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 4 StundenViren und Trojaner

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 8 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware7 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...