Jump to content

Batch: Gezieltes Ersetzen eines Zeichens in einer Variablen mit set


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Werte Gemeinde,

 

in der Erläuterung des Set-Befehls steht:

 

Das Ersetzen von Umgebungsvariablen wurde folgendermaßen erweitert:

 

%PATH:str1=str2%

 

Dies erweitert die PATH-Umgebungsvariable, wobei jede Instanz von "str1" im

erweiterten Ergebnis mit "str2" ersetzt wird. "str2" kann die leere

Zeichenfolge sein, um alle Instanzen von "str1" aus der erweiterten Ausgabe zu

löschen. Wenn "str1" mit einem Sternchen beginnt, steht "str1" für alles

zwischen dem Anfang der erweiterten Ausgabe bis zum ersten Auftreten des

übrigen Abschnitts von "str1".

 

Wenn ich da das so anwende,

 

set surname=loeffler
set surname=%surname:l=L%
echo %surname%
pause

 

werden beide kleine l-Buchstaben durch grosse ersetzt, es soll aber nur mit dem ersten geschehen.

 

Natürlich könnte ich nun den ersten Buchstaben und den Rest voneinander extrahieren und nach dem Ersetzen des ersten wieder vereinigen.

 

set surname=loeffler

set pro=%surname:~0,1%
set epi=%surname:~1%

echo %pro%
echo %epi%

set pro=%pro:l=L%
echo %pro%

set surname=%pro%%epi%

echo %surname%

pause

 

l

oeffler

L

Loeffler

 

Ich suchte im Web nach einem Trick, Extraktion und Substitution zu vereinigen, genauer, das erste Zeichen adressiert zu ersetzen, wurde aber nicht fündig.

 

Hat jemand eine Idee?

 

Ich weiß es natürlich, eigentlich löst man sowas mit VBS oder Powershell.

 

Habt Dank für Aufmerksamkeit und Rat.

 

Edgar

bearbeitet von lefg
Link zu diesem Kommentar

Moin,

 

ich weiß es natürlich, eigentlich löst man sowas mit VBS oder Powershell; die Batch zum Anlegen der Benutzer, der OU, der Sicherheitsgruppen, der Verzeichnisse, zum Ändern der Berechtigungen, die existiert aber schon.

 

Off-Topic:

Ich bin nur einmal einem Menschen begegenet, von dem ich glaubte, er kenne den Kommandoprozessor so gut, dass er mein Problem hätte so lösen können. Leider scheint er verstorben zu sein, seine letzte Aktiviät 2009 hier am Board und eine Trauenranzeige passen zusammen.

Link zu diesem Kommentar

Hallo,

 

hier ist auch eine Lösung:

title case - Make the first letter of user input a capital in a batch script - Stack Overflow

 

Dort wird eine Hilfsfunktion FirstUp definiert, die den ersten Buchstaben eines Strings in Großbuchstaben wandelt.

Aber die Funktionsweise ist ja gleich der schon gefundenen Lösung mit dem Aufsplitten und Zusammenfügen.

Link zu diesem Kommentar

Den Kameraden Maneich hatte ich bereits aufgegeben, tatsächlich gibt es ihn aber noch und er antwortete auf meine Mail, schickte eine Lösung.

 

set str=kennwort

setlocal enabledelayedexpansion
::1.Buchstaben extrahieren
set str1=%str:~0,1%
echo %str1%

::1.Buchstabe in Goß umwandeln, auch wenn bereits groß
for %%a in ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I" "j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R" 
"s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z") do ( 
   set "str1=!str1:%%~a!" 
) 
echo %str1%

::Zusammensetzung des Kennworts mit Groß 1.Buchstabe
set str=%str1%%str:~1%
echo %str%

pause

Link zu diesem Kommentar

Eine Lösung aus dem Link von Zoni:

 

setlocal EnableDelayedExpansion
call :FirstUp result kennwort
echo !result!

pause
goto :eof

:FirstUp
setlocal EnableDelayedExpansion
set "temp=%~2"
set "helper=##AABBCCDDEEFFGGHHIIJJkKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ"
set "first=!helper:*%temp:~0,1%=!"
set "first=!first:~0,1!"
if "!first!"=="#" set "first=!temp:~0,1!"
set "temp=!first!!temp:~1!"
(
   endlocal
   set "result=%temp%"
   goto :eof
)

 

Es funktioniert auch ohne die Anführungszeichen.

bearbeitet von lefg
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...