Jump to content
Sign in to follow this  
Blade1981

In Variable nach String suchen

Recommended Posts

Hallo zusammen,

 

ich weiß zwar, dass man mit "findstr" in einer Datei nach einem String suchen kann, aber gibt es auch eine Möglichkeit, in einer Variablen nach einem String zu suchen?

 

Wir arbeiten mit Benutzernamen und einer Zahlerweiterung:

 

normaler Benutzer:

Benutzer01

 

Erweiterter Benutzer:

Benutzer-a01

 

Sie sollen Beide das gleiche Script ausführen, aber in diesem Script soll abgefragt werden, um welchen Benutzer es sich handelt.

 

Sprich, wenn -a an viert-letzter Stelle vorkommt, dann ist das ein Erweiterter Benutzer und der soll in dem Anmeldescript diese Zeile umgehen.

 

Also so:

wenn an viertletzter Stelle von %USERNAME% "-a" dann nicht ausführen regkey.reg

 

Es würde auch schon sehr helfen, nur nach "-a" in der Variablen suchen zu lassen, aber mit Stellenabfrage wäre natürlich besser!

 

Danke für eure Hilfe!

 

P.S.: Der Benutzername istnatürlich nicht immer gleich, sonst wäre das ja so gegangen:

set varUser=%USERNAME:~7,2%

Ich habe es nun so lösen können:

 

Rem Abfrage ob Erweiterter oder Normaluser

Rem von hinten 4 Zeichen zurueck zaehlen und in die Variable varUser ablegen

set varUser=%USERNAME:~-4%

 

Rem in der Variable varUser die ersten beiden Zeichen auslesen und als Variable merken

set varUser=%varUser:~0,2%

 

Rem wenn die Variable NICHT mit "-a" (Groß u Kleinschreibung ignorieren /I) gefuellt ist, ist es kein Erweiterter-User -> Befehl ausfuehren!

if /I NOT %varUser%==-A befehl.cmd

Share this post


Link to post

Moin Blade,

 

eine etwas kürzere Variante wäre (Beispiel zum Test am CMD-Prompt):

echo %username%|find /i "a-1">nul && @echo Ist ein A-1-User
-bzw-
echo %username%|find /i "a-1">nul || @echo Issn DAU
[/Code]

 

In Deinem batch entsprechend

[Code]
....
echo %username%|find /i "a-1">nul && goto :weiterBeiA1Usern
...
[/Code]

 

Grüße

Biber

Share this post


Link to post

@Biber

Also bei mir funktioniert das nicht.

 

Kannst du mir die Befehlszeile genauer erklären?

 

bezüglich |

und find /i

und auch >nul

sowie das && bzw. die ||

 

Vielen Dank bereits!

Share this post


Link to post

Moin Blade,

 

sorry, ich hatte vorhin zu flüchtig auf das Originalbeispiel geschaut und in meinem Beispiel nicht den Suchstring "-A", sondern den String "A-1" verwendet.

Irgendeine Freud'sche Fehlleistung, nehme ich an.

 

Anyhow, hier nochmal das Ganze in epischer Breite und schrittweise am CMD-Prompt hergeleitet.

Die Zeilen, die mit ">" beginnen, sind die Eingaben. Das ">" NICHT mit eingeben.


>set testusername=Benutzer-a01

>echo Benutzer: [%testusername%]
Benutzer: [benutzer-a01]

>echo %testusername%|find /i "-a"
Benutzer-a01
>echo %errorlevel%
0

>echo %testusername%|find /i "-x"

>echo %errorlevel%
1
[/Code]

Ich definiere oben mit dem SET-Befehl eine Umgebungsvariable %testusername%.

Als Erstes lasse ich die anzeigen mit Echo. Okay, keine Kunst.

Danach übergeb ich die echo-Ausgabe mit dem Pipe-Symbol "|" an den Find-Befehl.

Die Sequenz "befehl1 | befehl2" heißt nichts anderes als "Übergib die Ausgabe von befehl1 als Input für befehl2".

In meinem Fall wird oben also der Text "Benutzer-a01" quasi als Input-File an den Find-Befehl übergeben mit der Aufforderung "Schau ma', ob in diesem Text ein "-a" vorkommt. Ach ja, gross/kleingeschreibung /i = ignorieren.

 

Okay, wenn der Suchstring gefunden wird, dann setzt der Find-Befehl das Errorlevel 0 - bedeutet "Alles prima, Erfolg gehabt, gefunden, TRUE"

Wird der Suchstring nicht gefunden wird, dann setzt der Find-Befehl das Errorlevel 1 - bedeutet "Fehler, Pech gehabt, nicht gefunden, FALSE".

 

Die Befehlsverkettung " (befehl1) && (befehl2)" bedeutet:

führe erst befehl1 aus, wenn der klappt/TRUE liefert/errorlevel 0 setzt, NUR DANN führe befehl2 aus

 

Die Befehlsverkettung " (befehl1) || (befehl2)" bedeutet:

führe erst befehl1 aus, wenn der Fehler wirft/FALSE liefert/errorlevel > 0 setzt, NUR DANN führe befehl2 aus

 

Grüße

Biber

Share this post


Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...