Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

IF-Abfrage welche auf Sonderzeichen und Zahlen reagiert

Frage Entwicklung Batch & Shell

Mitglied: 74487

74487 (Level 1)

30.01.2009, aktualisiert 17:01 Uhr, 4013 Aufrufe, 16 Kommentare

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.


Schönen Abend noch, René Wayne.
Mitglied: bastla
30.01.2009 um 17:17 Uhr
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
Bitte warten ..
Mitglied: 74487
30.01.2009 um 23:22 Uhr
Naja Zahlen und Bindestriche. Erlaubt halt nur Buchstaben (groß und klein). Egal wie, hauptsache es kommt ein Ergebnis
Bitte warten ..
Mitglied: bastla
30.01.2009 um 23:28 Uhr
Hallo Notzke!

Dann etwa so:
01.
@echo off & setlocal 
02.
set "Erlaubt=AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" 
03.
 
04.
set C=%temp%\CheckChars.vbs 
05.
>%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 
06.
 
07.
set /p "Wort=Bitte zu untersuchendes Wort eingeben: " 
08.
 
09.
if not defined Wort (echo Kein Wort eingegeben! & pause & goto :eof) 
10.
 
11.
set Check= 
12.
for /f %%i in ('cscript //nologo %C% "%Wort%"') do set "Check=%%i" 
13.
If "%Check%" neq "OK" (echo Wort nicht OK! & pause & goto :eof) 
14.
echo OK: "%Wort%"
Grüße
bastla
Bitte warten ..
Mitglied: 74487
02.02.2009 um 15:07 Uhr
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.
Bitte warten ..
Mitglied: bastla
02.02.2009 um 15:17 Uhr
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
Bitte warten ..
Mitglied: 74487
02.02.2009 um 15:29 Uhr
Das habe ich auch schon probiert. Allerdings sagte er dann durchgehend dass das Wort falsch wäre.
Bitte warten ..
Mitglied: bastla
02.02.2009 um 15:36 Uhr
Allerdings sagte er dann durchgehend dass das Wort falsch wäre.
... was ja daran liegen könnte, dass es nicht ganz richtig ist ...

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 Formatierung als Code Gebrauch machen).

Grüße
bastla
Bitte warten ..
Mitglied: 74487
02.02.2009 um 15:41 Uhr
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.


01.
@echo off & setlocal 
02.
 
03.
set x=0 
04.
 
05.
:start  
06.
 
07.
set /a x=%x%+1 
08.
 
09.
REM Username auslesen 
10.
 
11.
for /f "tokens=1,* delims=:" %%i in ('findstr /n  $ users.txt') do @(  
12.
    for /L %%a in (%x%,%x%,%x%) do @if %%i==%%a @set user=%%j 
13.
 
14.
set "Erlaubt=AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" 
15.
 
16.
set C=CheckChars.vbs 
17.
>%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 
18.
 
19.
set "Wort=%user%" 
20.
 
21.
if not defined Wort (echo Kein Wort eingegeben! & pause & goto :eof) 
22.
 
23.
set Check= 
24.
for /f %%i in ('cscript //nologo %C% "%Wort%"') do set "Check=%%i" 
25.
If "%Check%" neq "OK" (echo Wort nicht OK! & pause & goto :eof) 
26.
echo %Wort% >>test.txt 
27.
 
28.
goto start
Bitte warten ..
Mitglied: bastla
02.02.2009 um 15:53 Uhr
Hallo Notzke!

Dann sollte doch (ungetestet) etwa folgendes genügen:
01.
@echo off & setlocal 
02.
set "Erlaubt=AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" 
03.
set C=CheckChars.vbs 
04.
>%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 
05.
 
06.
 
07.
REM Usernamen auslesen 
08.
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 ...
Bitte warten ..
Mitglied: 74487
02.02.2009 um 15:58 Uhr
Sieht schon gut aus - aber irgendwie wird keine test.txt erzeugt.
Bitte warten ..
Mitglied: bastla
02.02.2009 um 17:02 Uhr
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
Bitte warten ..
Mitglied: 74487
03.02.2009 um 08:13 Uhr
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?
Bitte warten ..
Mitglied: bastla
03.02.2009 um 08:53 Uhr
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
Bitte warten ..
Mitglied: 74487
03.02.2009 um 08:55 Uhr
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? O
Bitte warten ..
Mitglied: 74487
03.02.2009 um 09:01 Uhr
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.

01.
@echo off & setlocal  
02.
set "infile=quelle.txt"  
03.
set "outfile=users.txt"  
04.
if exist "%outfile%" del "%outfile%"  
05.
FOR /F "usebackq tokens=1,2,*" %%a in ("%infile%") do (echo %%a %%b)>>"%outfile%" 
06.
 
07.
 
08.
set "Erlaubt=AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" 
09.
set C=CheckChars.vbs 
10.
>%C% echo T=WScript.Arguments(0):E="OK":For i=1 To Len(T):If InStr("%Erlaubt%",Mid(T,i,1)) 
11.
 
12.
=0 Then:E="":Exit For:End If:Next:WScript.Echo E 
13.
 
14.
for /f "delims=" %%i in (users.txt) do for /f %%a in ('cscript //nologo %C% "%%i"') do if  
15.
 
16.
"%%a"=="OK" echo %%i>>test.txt 
17.
 
Bitte warten ..
Mitglied: bastla
03.02.2009 um 10:41 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
C und C++
gelöst IF Abfrage funktioniert nicht mehr (2)

Frage von pablovic zum Thema C und C ...

Datenbanken
gelöst IF Abfrage im SELECT Oracle SQL (2)

Frage von Roadrunner777 zum Thema Datenbanken ...

Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...