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, 3361 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch zum bearbeiten mehrerer CSV (3)

Frage von Matzus87 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

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

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

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

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...