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

Anmeldename kürzen mit Bedingung per batch

Frage Entwicklung Batch & Shell

Mitglied: meandmyself

meandmyself (Level 1) - Jetzt verbinden

13.11.2010 um 14:18 Uhr, 3388 Aufrufe, 13 Kommentare

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:

01.
@echo off & setlocal 
02.
 
03.
chcp 1252 
04.
 
05.
set "regkey="HKCU\Volatile Environment"" 
06.
Set "qrycmd= reg query %regkey% /v NWUSERNAME" 
07.
FOR /F "tokens=2*" %%i in ('%QryCmd%^|find "REG_SZ"') do set "nwusername=%%j" 
08.
 
09.
set initial=%nwusername% 
10.
set iniEnd=%initial:~-1% 
11.
set ini=%initial:~0,2% 
12.
set ini2=%ini%%iniEnd% 
13.
 
14.
chcp 850 
15.
echo %ini2% 
16.
pause
Wie krieg´ ich den zweiten Teil der Bedingung mit dem Grossbuchstaben hin?

Vielen Dank und Gruß,
meandmyself
Mitglied: rubberman
13.11.2010 um 15:20 Uhr
Hallo meandmyself.

Du brauchst einen Befehl, der Groß- und Kleinbuchstaben unterscheiden kann. FIND oder FINDSTR bieten sich an.
* snipp
01.
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 &&( 
02.
  set "ini2=%ini%%iniEnd%" 
03.
) || ( 
04.
  set "ini2=%ini%" 
05.
)
* 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 />
Bitte warten ..
Mitglied: meandmyself
13.11.2010 um 15:34 Uhr
Hallo rubberman,

dankesehr, aber ich verstehe deinen Code glaube ich nicht, in der ersten Zeile sucht er nach Grossbuchstaben in der %iniEnd%-Variable und dann?
Wenn ich deine Code einfüge, bekomme ich beim Beispiel "MüllerA" nur am echo raus.

Danke für weitere Anregungen,

meandmyself
Bitte warten ..
Mitglied: meandmyself
13.11.2010 um 15:38 Uhr
Hallo rubberman,

dankesehr, aber ich verstehe deinen Code nicht ganz, in der ersten Zeile sucht er nach Grossbuchstaben in der Variablen %iniEnd% und dann?

Wenn ich dein Beispiel einfüge, bekomme ich für MüllerA am echo ausgeworfen.

Danke für weitere Anregungen,

meandmyself
Bitte warten ..
Mitglied: meandmyself
13.11.2010 um 15:39 Uhr
oops, sorry für das Doppelposting.
Bitte warten ..
Mitglied: rubberman
13.11.2010 um 16:06 Uhr
Hallo meandmyself.

Dann mal gleich mit FINDSTR. FIND funktioniert natürlich anders, sorry.
01.
echo\%iniEnd%|findstr "[A-Z] Ä Ö Ü" >nul &&( 
02.
  set "ini2=%ini%%iniEnd%" 
03.
) || ( 
04.
  set "ini2=%ini%" 
05.
)
Grüße
rubberman
Bitte warten ..
Mitglied: meandmyself
13.11.2010 um 16:11 Uhr
super, nun wirft er für "JemandX" JeX aus, aber bei "Jemand" sollte nur Je rauskommen statt Jed? Woran liegt das?
Danke für dein Hilfe.

Gruß,
meandmyself
Bitte warten ..
Mitglied: rubberman
13.11.2010 um 16:32 Uhr
Hallo meandmyself.

Liegt wahrscheinlich daran, dass du es nicht richtig in deinen Code eingebaut hast.
01.
@echo off & setlocal 
02.
 
03.
chcp 1252>nul 
04.
 
05.
set "regkey="HKCU\Volatile Environment"" 
06.
Set "qrycmd= reg query %regkey% /v NWUSERNAME" 
07.
FOR /F "tokens=2*" %%i in ('%QryCmd%^|find "REG_SZ"') do set "nwusername=%%j" 
08.
 
09.
set "iniEnd=%nwusername:~-1%" 
10.
set "ini=%nwusername:~0,2%" 
11.
echo\%iniEnd%|findstr "[A-Z] Ä Ö Ü" >nul &&( 
12.
  set "ini2=%ini%%iniEnd%" 
13.
) || ( 
14.
  set "ini2=%ini%" 
15.
16.
 
17.
chcp 850>nul 
18.
echo %ini2% 
19.
pause
Grüße
rubberman
Bitte warten ..
Mitglied: meandmyself
13.11.2010 um 16:36 Uhr
nee, auch mit exakt deinem Code kommt "Jed" raus.

Noch ne Idee? Danke.
Bitte warten ..
Mitglied: rubberman
13.11.2010 um 17:04 Uhr
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
01.
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 &&(
Vielleicht kann jemand anders erklären warum. Mir fällt da gerade nichts ein.

Grüße
rubberman
Bitte warten ..
Mitglied: meandmyself
13.11.2010 um 19:42 Uhr
Genial, jetzt klappt´s! Nochmals dankeschön für deine Unterstützung.

Beste Grüße,

meandmyself
Bitte warten ..
Mitglied: 76109
14.11.2010 um 14:51 Uhr
Bitte warten ..
Mitglied: pieh-ejdsch
14.11.2010 um 17:29 Uhr
Moin zusammen,
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.

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]"
findet auch ein großes A und auch ein kleines b

echo\aB|findstr "[A-b]"
findet dagegen nichts

01.
echo\"%nwusername:~-1%"|findstr "[ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ]"&&( 
02.
	set "ini2=%nwusername:~0,2%%nwusername:~-1%" 
03.
) || ( ....)
würde Zeile 9 und 10 überflüssig machen.

Gruß Phil
Bitte warten ..
Mitglied: rubberman
14.11.2010 um 18:11 Uhr
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
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch - ein paar Basics die man kennen sollte

Tipp von Pedant zum Thema Batch & Shell ...

Batch & Shell
Batch zum Zurücksetzen eines lokalen Profils

Tipp von Mr.Error zum Thema Batch & Shell ...

Batch & Shell
gelöst Laufwerksbezeichnung (label) in Batch als Variable nutzen (7)

Frage von tobias.mock zum Thema Batch & Shell ...

Neue Wissensbeiträge
Batch & Shell

Batch - ein paar Basics die man kennen sollte

Tipp von Pedant zum Thema Batch & Shell ...

Microsoft

Restrictor: Profi-Schutz für jedes Window

(6)

Tipp von AlFalcone zum Thema Microsoft ...

Batch & Shell

Batch zum Zurücksetzen eines lokalen Profils

Tipp von Mr.Error zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft Office
Saubere HTML aus Word-Dokument (16)

Frage von peterpa zum Thema Microsoft Office ...

Router & Routing
ASUS RT-N18U mit VPN Client hinter Fritzbox - Portforwarding (15)

Frage von marshall75000 zum Thema Router & Routing ...

Hosting & Housing
gelöst Webserver bei WIX, aber DNS Server wo anders (9)

Frage von laster zum Thema Hosting & Housing ...

Debian
gelöst Plesk php-fpm Fehler (7)

Frage von sebastian2608 zum Thema Debian ...