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

Hilfe bei Konvertierung von Klein- in Großbuchstabe

Frage Entwicklung Batch & Shell

Mitglied: 18392

18392 (Level 1)

09.10.2005, aktualisiert 12.10.2005, 14832 Aufrufe, 7 Kommentare

Eine Variable soll von Kleinbuchstaben in Großbuchstaben geändert werden

Hallo zusammen!

Ersteinmal einen angenehmen Sonntag euch allen. Ich bin gerade dabei eine Batch zu schreiben, die ein paar Dateien herunterläd, diese dann entpackt, weiter verarbeitet und dann auf eine Unix Maschine hochläd. Der Knackpunkt ist das Hochladen, da die Datei, die dort hochgeladen werden soll, Großgeschrieben werden muss. Ich habe keine Ahnung wie ich eine Datei in Großbuchstaben wandle.

Nehmen wir an, ich habe die Dateien test.txt und test2.txt. Die sollen von a nach b kopiert werden und dabei von klein test auf groß TEST geändert werden.

Dateien liegen im Verzeichnis: c:/temp und sollen nach d:/temp. Da es sich dabei um Dateien handelt, die sich nur beim Basename ändern, ist die Extension egal. In meiner Batch deklariere ich eine Variable, die meine ganzen Namen enthält, die ich nachher bearbeiten will.

Beispiel:
VAR1=test test2

Theoretischer Ansatz: for %i in %VAR1% do %i > %I

Rauskommen soll dann: VAR2=TEST TEST2


Wäre klasse, wenn mir jemand mit Rat und Tat zur Seite stehen könnte. Ich hoffe es ist gut beschrieben.

Dank euch,
Dirk
Mitglied: Biber
09.10.2005 um 16:21 Uhr
Moin, JimsKnopf,

ich hasse Batch-Anforderungen, die ich nicht mit einem Oneliner beantworten kann...

Den umgekehrten Fall (alle Dateien in Kleinbuchstaben umwandeln) hätte ich mit einem Einzeiler erschlagen können
01.
for /F %i in ('dir /b /l *.*') do ren %i %i
...aber nein, Du brauchst ja GROSS-Buchstaben..*grummel*

Gute Nachricht zwichendurch: Du hast es hervorragend beschrieben.
Hab ich auch verstanden, denke ich. In meinen Beispielen schreibe ich trotzdem den UPPER-Text wieder in %VAR1% statt in eine zweite Variable Var2.

Also: Es gibt vom Command-Prompt aus KEINE Möglichkeit, Strings in UPPER oder Lower umzuwandeln.

Wenn man/frau es trotzdem tun muss, würden mir folgende Alternativen einfallen:

a) Über native commands, also über das, was M$ uns bereitstellt (MacGyver-Variante )
Jedes gottverdammte Zeichen in dem umzuwandelnden String einzeln anfassen und übersetzen:
01.
::--------Snipp MacGyversToUpper.bat---------- 
02.
@echo off 
03.
:: Annahme: Deine %Var1% ist normalerweise schon vorher gesetzt.  
04.
:: Zum Spielen setz ich sie mal hier 
05.
Set Var1="kleindatei1 GemischteDatei2 whatever3" 
06.
set Var1=%Var1:a=A%  
07.
set Var1=%Var1:b=B%  
08.
set Var1=%Var1:c=C%  
09.
set Var1=%Var1:d=D%  
10.
set Var1=%Var1:e=E%  
11.
set Var1=%Var1:f=F%  
12.
set Var1=%Var1:g=G%  
13.
set Var1=%Var1:h=H%  
14.
set Var1=%Var1:i=I%  
15.
set Var1=%Var1:j=J%  
16.
set Var1=%Var1:k=K%  
17.
set Var1=%Var1:l=L%  
18.
set Var1=%Var1:m=M%  
19.
set Var1=%Var1:n=N%  
20.
set Var1=%Var1:o=O%  
21.
set Var1=%Var1:p=P%  
22.
set Var1=%Var1:q=Q%  
23.
set Var1=%Var1:r=R%  
24.
set Var1=%Var1:s=S%  
25.
set Var1=%Var1:t=T%  
26.
set Var1=%Var1:u=U%  
27.
set Var1=%Var1:v=V%  
28.
set Var1=%Var1:w=W%  
29.
set Var1=%Var1:x=X%  
30.
set Var1=%Var1:y=Y%  
31.
set Var1=%Var1:z=Z%  
32.
:: ~~~~~ %Var1% ist jetzt "KLEINDATEI1 GEMISCHTEDATEI2 WHATEVER3"
::----------Snapp MacGyversToUpper.bat
Diese Mimik funktioniert natürlich, hat aber die spielerische Eleganz eines Sat1-Nachmittags-Talks.
Habe ich auch nur der Vollständigkeit gepostet.


b) Umwandeln der Strings in UPPERCASE/lowercase über irgendwelchen Freewarequatsch.

Den gibt es natürlich. Aber höchst inkompatibel (Umlaute) und inflexibel. Und Du brauchst eben ein Zusatzutility, wo auch immer dein Batchlet laufen soll.
Den Weg hab ich nicht weiter verfolgt (kannst aber gerne Gogglen. Gibt eimerweise solche Tools).


c) Aufruf von vorhandenen Konvertierungsroutinen in JScript/VBSkript

Das wäre schon eher ein Weg, mit dem ich liebäugeln würde: Im Batch selbst einen VB- oder JScript-Schnipsel erzeugen und den aufrufen.

Das würde ungefähr so laufen können:

Beispiel JS-Schnipsel aus *.Bat erzeugen und aufrufen:

::
01.
--------Snipp MakeUpperJS.bat 
02.
@echo off 
03.
::Variante der UpperCase-Umwandlung mit JScript; 
04.
Set ToUpperjs=%temp%\%random%.js 
05.
echo var StrToConv = "%*"; >%ToUpperjs% 
06.
echo WScript.Echo(StrToConv.toUpperCase());>>%ToUpperjs%  
07.
cscript //nologo %ToUpperjs% 
08.
::-------Snapp  MakeUpperJS.bat

Beispiel VBS-Schnipsel aus *.Bat erzeugen und aufrufen:
::
01.
-------Snipp MakeUpperVBS.Bat 
02.
@echo off 
03.
:: ToUpper-VBS-Snippet... wandelt einen übergebenen Parameter in UPPER-Text um 
04.
Set ToUppervbs=%temp%\%random%.vbs 
05.
echo StrToConv = wscript.arguments.item(0) >%ToUppervbs% 
06.
echo WScript.Echo( UCase(StrToConv))>>%ToUppervbs% 
07.
cscript //nologo %ToUppervbs% %1 
08.
::-------Snapp MakeUpperVbs.bat

...oder, wenn ich das Ganze mal anwende auf Deine %Var1%:
::
01.
---------snipp MakeVar1Upper.bat 
02.
@echo off 
03.
:: ToUpper-VBS-Snippet... wandelt einen übergebenen Parameter in UPPER-Text um 
04.
Set ToUppervbs=%temp%\%random%.vbs 
05.
echo StrToConv = wscript.arguments.item(0) >%ToUppervbs% 
06.
echo WScript.Echo( " " ^& UCase(StrToConv))>>%ToUppervbs% 
07.
 
08.
:: Hier geht es eigentlich los 
09.
:: Folgende Zeile nur zum Test; var1 sollte VORHER outside of Batch gesetzt sein 
10.
Set "var1= kleindatei1 GemischteDatei2 whatever3" 
11.
Echo Var1  vorher: %var1% 
12.
Set "Var2=" 
13.
:: In Var2 sollen die geUpperten Strings rein 
14.
For %%i in (%var1%) do call:ToUpper %%i 
15.
:: in Var2 steht nun der GROSS-Text 
16.
Set "Var1=%Var2%" 
17.
echo Var1 nachher: %var1% 
18.
:Cleanup 
19.
del %ToUpperVBS% 
20.
goto :eof 
21.
~~~~~~ Ende der eigentlichen Batchs 
22.
 
23.
::~~~hier noch die Winzroutine ToUpper 
24.
:ToUpper 
25.
for /f "tokens=2" %%a in ('cscript //nologo %ToUppervbs% %1') do ( 
26.
        set "Var2=%Var2% %%a"  
27.
28.
goto :eof 
29.
:: ---------snapp MakeVar1Upper.bat
Output, wenn ich das aufrufe:
01.
>MakeVar1Upper.bat 
02.
Var1  vorher:  kleindatei1 GemischteDatei2 whatever3 
03.
Var1 nachher:  KLEINDATEI1 GEMISCHTEDATEI2 WHATEVER3
d) Oder du machst einen Einzeiler auf Unix-Seite statt auf dem Windows-Rechner:
01.
 for name in * ; do mv -i $name `echo $name | tr [a-z] [A-Z]` ; done. 

oder (etwas lesbarer)
01.
 for name in * ; do mv -i $name `echo $name | tr [:lower:] [:upper:]` ; done. 
(Soweit ich es im Kopf habe... habe grad keinen Unix-Rechner so Hause. Sollte aber nah dran sein.)

HTH & HAND
Frank / der Biber aus Bremen

[Edit]
Für diejenigen, denen "MacGyver" nichts sagt: Das war eine US-Amerikanische B- oder C-Fernsehserie, deren Titelheld, ein grenzenlos optimistischer Bastler, sich in jeder Folge in einer absolut ausweglosen Situation wiederfand. Also mit Handschellen an die Gleise gekettet vor einem heranbrausenden ICE oder ähnliches. Aber dann (Fanfare aus dem Off) geht ein Leuchten über sein Gesicht, weil er gänzlich unerwartet ein Stückchen Bindfaden und eine Spiegelscherbe in der Tasche findet und weiß: Alles wird gut, damit komm ich hier raus.
Ist eine Einstellung, die auch beim Bätche-Schreiben nicht verkehrt ist.
[/Edit]
[Edit II]
Aufgrund neuerer Erkenntnisse MacGyvers Namen nun richtiger geschrieben.
[/Edit II]
Bitte warten ..
Mitglied: 18392
10.10.2005 um 14:57 Uhr
Supi, dank dir für die doch sehr ausführliche Beschreibung! Hätte dir je gerne einen Einzeiler gegönnt, aber warum einfach, wenn man es schwer haben kann. Deine Ergänzung zu MacGuyver ist für die Unwissenden unter uns, sicher sehr hilfreich ;) Aber mal ehrlich, wer kennt ihn nicht, den Mann der aus Kaugummis Bomben baut *g*
Bitte warten ..
Mitglied: Biber
11.10.2005 um 17:45 Uhr
Tja, JimsKnopf,

wir alle kennen ihn, aber wie er sich nun richtig schreibt, das weiß keiner....*gg
Ich habe beim Schreiben meiner Antwort oben auch vollkommen verunsichert über Suchmaschine nachgeprüft (ich hatte erst "MacGuywer" dort stehen, aber das sah auch irgendwie komisch aus..)
Na ja, im Internet gibt es ihn jedenfalls in allen Schreibweisen. Plus einige, auf die ich nie gekommen wäre ("MagGuywer" zum Beispiel)
Sonst genau wie hier im Thread - zum Teil unterschiedlich geschrieben auf der selben Seite...

Eigentliche Frage: läuft es denn inzwischen bei Dir mit einer der vorgeschlagenen Strategien?
Bitte warten ..
Mitglied: 18392
12.10.2005 um 10:26 Uhr
Jip, es läuft! Ich habe mich für deinen Einzeiler entschieden und mein Skript umgebaut, dann werden die halt ersma groß eingelesen und hinterher mach ich sie einfach klein. Der Weg schien mir doch der einfachste Ich wollte schließlich kein J oder VBSkript. Ich liebe es, wenn man alles mit einer Sprache erschlagen kann. Auf der Linuxebene hab ich keinen Streß, da hat man ja für jede Schweinerei ne Möglichkeit, aber bei Windows ist man doch irgendwie eingeschränkt oder es fällt einem gerade nicht der richtige Parameter ein. Also nochmals vielen Dank!
Bitte warten ..
Mitglied: Biber
12.10.2005 um 11:16 Uhr
Dafür nich'...

Den Einzeiler fand ich auch am verlockendsten, aber der hilft ja nur in Deinem ganz speziellen Fall. Ich dachte, falls jemand anderes diese Klein/Groß-Umwandlung braucht und nur Windows als Spielwiese hat...

Aber kannst mir auch einen Gefallen tun... finde doch mal bitte raus, wie sich dieser oben erwähnte Bastler nun tatsächlich schreibt... da hab ich immer noch keine Lösung.

HAND Frank
Bitte warten ..
Mitglied: 18392
12.10.2005 um 11:44 Uhr
Also ich habs gefunden: MacGyver
Hier ein Link http://www.amazon.de/exec/obidos/ASIN/B0007URSP8/wunschliste/028-946163 ...

Das ist unser allseits Bekannter Bastelkönig. Der Held unter den Extremtüftlern
Bitte warten ..
Mitglied: Biber
12.10.2005 um 11:52 Uhr
Danke!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
MBR in GPT Konvertierung "Live" möglich (5)

Frage von killtec zum Thema Windows Server ...

Windows Server
Neue Windows Server: Nano bedeutet viel mehr als nur klein

Link von Frank zum Thema Windows Server ...

Festplatten, SSD, Raid
gelöst Windows Server Systemfestplatte zu klein (22)

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

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

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 ...