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, 3379 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
Neue Wissensbeiträge
Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(2)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(5)

Anleitung von BassFishFox zum Thema Windows 10 ...

Administrator.de Feedback

Tipp: Ungelöste Fragen ohne Antwort in Tickeransicht farblich hinterlegen

Tipp von pattern zum Thema Administrator.de Feedback ...

Viren und Trojaner

Neue Magazin Ausgabe: Malware und Angriffe abwehren

Information von Frank zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Windows Systemdateien
Warum System auf "C:" (29)

Frage von DzumoPRO zum Thema Windows Systemdateien ...

LAN, WAN, Wireless
Cisco SG200: Auf bestimmtem vLAN bestimmte TCP-Ports sperren (16)

Frage von SarekHL zum Thema LAN, WAN, Wireless ...

Windows Server
gelöst Update BackupExec 2015 auf 2016 führt zu SQL-Server Problem (16)

Frage von montylein1981 zum Thema Windows Server ...

Cloud-Dienste
gelöst Bitcoins minen über Nacht? (16)

Frage von 1410640014 zum Thema Cloud-Dienste ...