74487
Goto Top

IF-Abfrage welche auf Sonderzeichen und Zahlen reagiert

Halloooooooo,

ich bin es wieder. ;)

Meine heutige Frage ist; wie sieht ein Script für eine IF-Abfrage aus, wenn es reagieren soll wenn das Wort Zahlen und/oder Sonderzeichen enthält?

Also quasi:


IF %wort%= Sonderzeichen und/oder Zahlen beinhaltet goto Befehl bla blubb


Über Antworten freue ich mich selbstverständlich. face-smile


Schönen Abend noch, René Wayne.

Content-Key: 107646

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

Printed on: April 25, 2024 at 21:04 o'clock

Member: bastla
bastla Jan 30, 2009 at 16:17:45 (UTC)
Goto Top
Hallo Notzke!

Das hängt zumindest von Deiner Definition für "Sonderzeichen" ab ...

Wäre es nicht ev sinnvoller, eine Liste der "erlaubten" Zeichen vorzugeben?

Grüße
bastla
Mitglied: 74487
74487 Jan 30, 2009 at 22:22:13 (UTC)
Goto Top
Naja Zahlen und Bindestriche. Erlaubt halt nur Buchstaben (groß und klein). Egal wie, hauptsache es kommt ein Ergebnis face-smile
Member: bastla
bastla Jan 30, 2009 at 22:28:57 (UTC)
Goto Top
Hallo Notzke!

Dann etwa so:
@echo off & setlocal
set "Erlaubt=AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"  

set C=%temp%\CheckChars.vbs
>%C% echo T=WScript.Arguments(0):E="OK":For i=1 To Len(T):If InStr("%Erlaubt%",Mid(T,i,1))=0 Then:E="":Exit For:End If:Next:WScript.Echo E  

set /p "Wort=Bitte zu untersuchendes Wort eingeben: "  

if not defined Wort (echo Kein Wort eingegeben! & pause & goto :eof)

set Check=
for /f %%i in ('cscript //nologo %C% "%Wort%"') do set "Check=%%i"  
If "%Check%" neq "OK" (echo Wort nicht OK! & pause & goto :eof)  
echo OK: "%Wort%"  
Grüße
bastla
Mitglied: 74487
74487 Feb 02, 2009 at 14:07:30 (UTC)
Goto Top
Naja das Script ansich läuft ja - nur hätte ich das gerne ohne Abfrage sondern das er automatisch sich eine vorher gesetzte Variable nimmt und diese prüft. face-sad
Member: bastla
bastla Feb 02, 2009 at 14:17:40 (UTC)
Goto Top
Hallo Notzke!

Wer oder was hält Dich davon ab, die Zeile 7 auf
set "Wort=%vorhergesetzteVariable%"
zu ändern?

Vielleicht ja die Möglichkeit, einfach in Zeile 12 anstelle von %Wort% Deine %vorhergesetzteVariable% zu verwenden ...

Grüße
bastla
Mitglied: 74487
74487 Feb 02, 2009 at 14:29:41 (UTC)
Goto Top
Das habe ich auch schon probiert. Allerdings sagte er dann durchgehend dass das Wort falsch wäre.
Member: bastla
bastla Feb 02, 2009 at 14:36:39 (UTC)
Goto Top
Allerdings sagte er dann durchgehend dass das Wort falsch wäre.
... was ja daran liegen könnte, dass es nicht ganz richtig ist ... face-wink

Da Leerzeichen nicht in der "Erlaubt"-Liste stehen: Könnte es sein, dass etwa am Ende Deines Wortes noch das eine oder andere LEerzeichen herumhängt? Lässt sich leicht prüfen, indem Du folgende Ausgabezeile einbaust:
echo #%vorhergesetzteVariable%%#
Die Begrenzung durch die "#" (oder ein beliebiges anderes auffälliges Zeichen) zeigt, wo Dein Wort tatsächlich endet (oder ev auch beginnt).

Falls dieser Ansatz auch keinen Erfolg bringt, bitte Deinen Batch (inkl. Zuweisung an die besagte Variable bzw Beispiel für ein falsch als "falsch" beurteiltes Wort) posten (und dabei bitte von der Möglichkeit der Gebrauch machen).

Grüße
bastla
Mitglied: 74487
74487 Feb 02, 2009 at 14:41:49 (UTC)
Goto Top
in der users.txt stehen pro Zeile Users drinnen welche mit der Schleife einen nach den anderen gelesen wird und dann geprüft werden soll. die korrekt geprüften kommen in die test.txt, die falschen sind egal. Danach soll er wieder hoch springen zu start.


@echo off & setlocal

set x=0

:start 

set /a x=%x%+1

REM Username auslesen

for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ users.txt') do @(   
    for /L %%a in (%x%,%x%,%x%) do @if %%i==%%a @set user=%%j

set "Erlaubt=AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"  

set C=CheckChars.vbs
>%C% echo T=WScript.Arguments(0):E="OK":For i=1 To Len(T):If InStr("%Erlaubt%",Mid(T,i,1))=0 Then:E="":Exit For:End If:Next:WScript.Echo E  

set "Wort=%user%"  

if not defined Wort (echo Kein Wort eingegeben! & pause & goto :eof)

set Check=
for /f %%i in ('cscript //nologo %C% "%Wort%"') do set "Check=%%i"  
If "%Check%" neq "OK" (echo Wort nicht OK! & pause & goto :eof)  
echo %Wort% >>test.txt

goto start
Member: bastla
bastla Feb 02, 2009 at 14:53:33 (UTC)
Goto Top
Hallo Notzke!

Dann sollte doch (ungetestet) etwa folgendes genügen:
@echo off & setlocal
set "Erlaubt=AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"  
set C=CheckChars.vbs
>%C% echo T=WScript.Arguments(0):E="OK":For i=1 To Len(T):If InStr("%Erlaubt%",Mid(T,i,1))=0 Then:E="":Exit For:End If:Next:WScript.Echo E  


REM Usernamen auslesen
for /f "delims=" %%i in (users.txt) do for /f %%a in ('cscript //nologo %C% "%%i"') do if "%%a"=="OK" echo %%j>>test.txt  
Grüße
bastla

P.S.: Sorry, wenn ich Dich mit der Bitte um "Code"-Formatierung überfordert haben sollte ...
Mitglied: 74487
74487 Feb 02, 2009 at 14:58:57 (UTC)
Goto Top
Sieht schon gut aus - aber irgendwie wird keine test.txt erzeugt.
Member: bastla
bastla Feb 02, 2009 at 16:02:28 (UTC)
Goto Top
Mit %%i in Zeile 8 sollte es besser gehen:
for /f "delims=" %%i in (users.txt) do for /f %%a in ('cscript //nologo %C% "%%i"') do if "%%a"=="OK" echo %%i>>test.txt
Grüße
bastla
Mitglied: 74487
74487 Feb 03, 2009 at 07:13:05 (UTC)
Goto Top
Ich hab das mal laufen lassen und hier ein Ausschnitt von dem was dann in der DOS-Box steht:

C:\Users\rewirdemann>for /F %a in ('cscript //nologo CheckChars.vbs "HHAzubi "') do if "%a" == "OK"
echo Gast 1>>test.txt

wo kommt die 1 her? face-sad
Member: bastla
bastla Feb 03, 2009 at 07:53:28 (UTC)
Goto Top
Hallo Notzke!

Die wesentlich wichtigere Frage wäre wohl: Wo kommt die 1 hin? Antwort: Nur auf den Bildschirm, aber nicht in Deine Datei ...

Um aber Dein Interesse zu würdigen: Mit der 1 wird der verwendete Ausgabekanal (in diesem Fall: STDOUT) angezeigt.

Grüße
bastla
Mitglied: 74487
74487 Feb 03, 2009 at 07:55:58 (UTC)
Goto Top
Ich glaub ich hab den Fehler gefunden. In der Users.txt ist in jeder Zeile nach dem Namen ein Leerzeichen. Als ich die mal probeweise weggemacht habe, ging alles.

Jetzt die Frage: Wie bekomm ich die Leerzeichen (1 Leerschritt hinter jeden Wort) weg? Oface-smile
Mitglied: 74487
74487 Feb 03, 2009 at 08:01:27 (UTC)
Goto Top
Also so bekomm ich die Leerzeichen (2) vor dem Wort weg. Vielleicht kann man das erweitern das man das eine hinter dem Wort auch wegbekommt.

@echo off & setlocal 
set "infile=quelle.txt"   
set "outfile=users.txt"   
if exist "%outfile%" del "%outfile%"   
FOR /F "usebackq tokens=1,2,*" %%a in ("%infile%") do (echo %%a %%b)>>"%outfile%"  


set "Erlaubt=AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"  
set C=CheckChars.vbs
>%C% echo T=WScript.Arguments(0):E="OK":For i=1 To Len(T):If InStr("%Erlaubt%",Mid(T,i,1))  

=0 Then:E="":Exit For:End If:Next:WScript.Echo E  

for /f "delims=" %%i in (users.txt) do for /f %%a in ('cscript //nologo %C% "%%i"') do if   

"%%a"=="OK" echo %%i>>test.txt  
Member: bastla
bastla Feb 03, 2009 at 09:41:14 (UTC)
Goto Top
Hallo Notzke!

Es wäre durchaus vorteilhaft, wenn Du einmal den allgemeinen Aufbau der "users.txt" beschreiben könntest (bisher war ich davon ausgegangen, dass je Zeile nur ein Username - und sonst nix - gespeichert ist).

Grüße
bastla