Anmeldename kürzen mit Bedingung per batch
Hallo zusammen,
wir möchten aus dem (in der registry hinterlegten) (Novell-)Anmeldenamen ein Benutzerkürzel zusammensetzen und diesen als Variable speichern, um ihn dann weiterverarbeiten zu können.
Die Schwierigkeit ist, dass der Anmeldename (hier: NWUSERNAME) nicht einheitlich aufgebaut ist. In einem Fall besteht er nur aus dem Nachnamen (klein geschrieben oder mit Anfangsbuchstabe gross), in anderen Fällen, wo der Nachname nicht individuell ist (z. B. wenn es zwei Müller gibt), lautet er beispielhaft "MüllerA" und "MüllerB" für Anton Müller und Berta Müller.
Nun soll aus "Musterfrau" bzw. "musterfrau" die ersten zwei Anfangsbuchstaben für das Kürzel extrahiert werden, also Mu bzw. mu, wenn der Anmeldename am Ende kein Grossbuchstabe ist. Wenn das der Fall ist, sollen die ersten zwei Anfangsbuchstaben und der letzte Buchstabe als Grossbuchstabe zusammengesetzt werden, sodass aus "MüllerB" MüB wird.
Bisher hab ich für die ersten 2 Anfangsbuchstaben:
Wie krieg´ ich den zweiten Teil der Bedingung mit dem Grossbuchstaben hin?
Vielen Dank und Gruß,
meandmyself
wir möchten aus dem (in der registry hinterlegten) (Novell-)Anmeldenamen ein Benutzerkürzel zusammensetzen und diesen als Variable speichern, um ihn dann weiterverarbeiten zu können.
Die Schwierigkeit ist, dass der Anmeldename (hier: NWUSERNAME) nicht einheitlich aufgebaut ist. In einem Fall besteht er nur aus dem Nachnamen (klein geschrieben oder mit Anfangsbuchstabe gross), in anderen Fällen, wo der Nachname nicht individuell ist (z. B. wenn es zwei Müller gibt), lautet er beispielhaft "MüllerA" und "MüllerB" für Anton Müller und Berta Müller.
Nun soll aus "Musterfrau" bzw. "musterfrau" die ersten zwei Anfangsbuchstaben für das Kürzel extrahiert werden, also Mu bzw. mu, wenn der Anmeldename am Ende kein Grossbuchstabe ist. Wenn das der Fall ist, sollen die ersten zwei Anfangsbuchstaben und der letzte Buchstabe als Grossbuchstabe zusammengesetzt werden, sodass aus "MüllerB" MüB wird.
Bisher hab ich für die ersten 2 Anfangsbuchstaben:
@echo off & setlocal
chcp 1252
set "regkey="HKCU\Volatile Environment""
Set "qrycmd= reg query %regkey% /v NWUSERNAME"
FOR /F "tokens=2*" %%i in ('%QryCmd%^|find "REG_SZ"') do set "nwusername=%%j"
set initial=%nwusername%
set iniEnd=%initial:~-1%
set ini=%initial:~0,2%
set ini2=%ini%%iniEnd%
chcp 850
echo %ini2%
pause
Wie krieg´ ich den zweiten Teil der Bedingung mit dem Grossbuchstaben hin?
Vielen Dank und Gruß,
meandmyself
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 155020
Url: https://administrator.de/contentid/155020
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo meandmyself.
Du brauchst einen Befehl, der Groß- und Kleinbuchstaben unterscheiden kann. FIND oder FINDSTR bieten sich an.
* snipp
* snipp
Wenn du FINDSTR benutzt, kannst du das unter Verwendung von regulären Ausdrücken noch etwas vereinfachen.
Grüße
rubberman
<EDIT: zu FINDSTR geändert />
Du brauchst einen Befehl, der Groß- und Kleinbuchstaben unterscheiden kann. FIND oder FINDSTR bieten sich an.
* snipp
echo\%iniEnd%|findstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Ä Ö Ü" >nul &&(
set "ini2=%ini%%iniEnd%"
) || (
set "ini2=%ini%"
)
Wenn du FINDSTR benutzt, kannst du das unter Verwendung von regulären Ausdrücken noch etwas vereinfachen.
Grüße
rubberman
<EDIT: zu FINDSTR geändert />
Hallo meandmyself.
Liegt wahrscheinlich daran, dass du es nicht richtig in deinen Code eingebaut hast.
Grüße
rubberman
Liegt wahrscheinlich daran, dass du es nicht richtig in deinen Code eingebaut hast.
@echo off & setlocal
chcp 1252>nul
set "regkey="HKCU\Volatile Environment""
Set "qrycmd= reg query %regkey% /v NWUSERNAME"
FOR /F "tokens=2*" %%i in ('%QryCmd%^|find "REG_SZ"') do set "nwusername=%%j"
set "iniEnd=%nwusername:~-1%"
set "ini=%nwusername:~0,2%"
echo\%iniEnd%|findstr "[A-Z] Ä Ö Ü" >nul &&(
set "ini2=%ini%%iniEnd%"
) || (
set "ini2=%ini%"
)
chcp 850>nul
echo %ini2%
pause
Grüße
rubberman
Das verwirrt mich gerade etwas, aber du hast recht. Der reguläre Ausdruck [A-Z] wird nicht richtig verwendet. Selbst mit Option /R nicht.
Es funktioniert aber mit der ausführlichen Version. Ersetze Zeile 11 durch
Vielleicht kann jemand anders erklären warum. Mir fällt da gerade nichts ein.
Grüße
rubberman
Es funktioniert aber mit der ausführlichen Version. Ersetze Zeile 11 durch
echo\%iniEnd%|findstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Ä Ö Ü" >nul &&(
Grüße
rubberman
Moin zusammen,
ganz einfach: findstr sucht in einen Angegebenen Bereich von Buchstaben erst den kleinen Buchstaben dann den großen Buchstaben.
Wird der SuchBereich mit kleinen Buchstaben angegeben wird der Buchstabe nach dem Bindestrich als GroßBuchstabe nicht gesucht.
findet auch ein großes A und auch ein kleines b
findet dagegen nichts
würde Zeile 9 und 10 überflüssig machen.
Gruß Phil
Zitat von @rubberman:
Das verwirrt mich gerade etwas, aber du hast recht. Der reguläre Ausdruck [A-Z] wird nicht richtig verwendet. Selbst mit Option /R nicht.
Vielleicht kann jemand anders erklären warum. Mir fällt da gerade nichts ein.
Das verwirrt mich gerade etwas, aber du hast recht. Der reguläre Ausdruck [A-Z] wird nicht richtig verwendet. Selbst mit Option /R nicht.
Vielleicht kann jemand anders erklären warum. Mir fällt da gerade nichts ein.
ganz einfach: findstr sucht in einen Angegebenen Bereich von Buchstaben erst den kleinen Buchstaben dann den großen Buchstaben.
Wird der SuchBereich mit kleinen Buchstaben angegeben wird der Buchstabe nach dem Bindestrich als GroßBuchstabe nicht gesucht.
echo\Ab|findstr "[a-B]"
echo\aB|findstr "[A-b]"
echo\"%nwusername:~-1%"|findstr "[ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ]"&&(
set "ini2=%nwusername:~0,2%%nwusername:~-1%"
) || ( ....)
Gruß Phil
Moin pieh-ejdsch.
Ja aber ... ich hab doch mit [A-Z] einen Bereich angegeben, der ausschließlich Großbuchstaben umfasst. Wie kommt findstr dazu (ohne dass Option /i angegeben ist) auch Kleinbuchstaben zu matchen. Irgendwie will mir das noch nicht einleuchten. Du hast es mit einer Klasse gelöst, aber wie müsste denn ein Bereich definiert werden, damit das funktioniert?
Grüße
rubberman
Ja aber ... ich hab doch mit [A-Z] einen Bereich angegeben, der ausschließlich Großbuchstaben umfasst. Wie kommt findstr dazu (ohne dass Option /i angegeben ist) auch Kleinbuchstaben zu matchen. Irgendwie will mir das noch nicht einleuchten. Du hast es mit einer Klasse gelöst, aber wie müsste denn ein Bereich definiert werden, damit das funktioniert?
Grüße
rubberman