18392
Goto Top

Hilfe bei Konvertierung von Klein- in Großbuchstabe

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

Content-Key: 17428

Url: https://administrator.de/contentid/17428

Ausgedruckt am: 28.03.2024 um 20:03 Uhr

Mitglied: Biber
Biber 09.10.2005 um 16:21:58 Uhr
Goto Top
Moin, JimsKnopf,

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

Den umgekehrten Fall (alle Dateien in Kleinbuchstaben umwandeln) hätte ich mit einem Einzeiler erschlagen können
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:
::--------Snipp MacGyversToUpper.bat----------
@echo off
:: Annahme: Deine %Var1% ist normalerweise schon vorher gesetzt. 
:: Zum Spielen setz ich sie mal hier
Set Var1="kleindatei1 GemischteDatei2 whatever3"  
set Var1=%Var1:a=A% 
set Var1=%Var1:b=B% 
set Var1=%Var1:c=C% 
set Var1=%Var1:d=D% 
set Var1=%Var1:e=E% 
set Var1=%Var1:f=F% 
set Var1=%Var1:g=G% 
set Var1=%Var1:h=H% 
set Var1=%Var1:i=I% 
set Var1=%Var1:j=J% 
set Var1=%Var1:k=K% 
set Var1=%Var1:l=L% 
set Var1=%Var1:m=M% 
set Var1=%Var1:n=N% 
set Var1=%Var1:o=O% 
set Var1=%Var1:p=P% 
set Var1=%Var1:q=Q% 
set Var1=%Var1:r=R% 
set Var1=%Var1:s=S% 
set Var1=%Var1:t=T% 
set Var1=%Var1:u=U% 
set Var1=%Var1:v=V% 
set Var1=%Var1:w=W% 
set Var1=%Var1:x=X% 
set Var1=%Var1:y=Y% 
set Var1=%Var1:z=Z% 
:: ~~~~~ %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:

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


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


...oder, wenn ich das Ganze mal anwende auf Deine %Var1%:
::
---------snipp MakeVar1Upper.bat
@echo off
:: ToUpper-VBS-Snippet... wandelt einen übergebenen Parameter in UPPER-Text um
Set ToUppervbs=%temp%\%random%.vbs
echo StrToConv = wscript.arguments.item(0) >%ToUppervbs%
echo WScript.Echo( " " ^& UCase(StrToConv))>>%ToUppervbs%  

:: Hier geht es eigentlich los
:: Folgende Zeile nur zum Test; var1 sollte VORHER outside of Batch gesetzt sein
Set "var1= kleindatei1 GemischteDatei2 whatever3"  
Echo Var1  vorher: %var1%
Set "Var2="  
:: In Var2 sollen die geUpperten Strings rein
For %%i in (%var1%) do call:ToUpper %%i
:: in Var2 steht nun der GROSS-Text
Set "Var1=%Var2%"  
echo Var1 nachher: %var1%
:Cleanup
del %ToUpperVBS%
goto :eof
~~~~~~ Ende der eigentlichen Batchs

::~~~hier noch die Winzroutine ToUpper
:ToUpper
for /f "tokens=2" %%a in ('cscript //nologo %ToUppervbs% %1') do (  
        set "Var2=%Var2% %%a"   
)
goto :eof
:: ---------snapp MakeVar1Upper.bat

Output, wenn ich das aufrufe:
>MakeVar1Upper.bat
Var1  vorher:  kleindatei1 GemischteDatei2 whatever3
Var1 nachher:  KLEINDATEI1 GEMISCHTEDATEI2 WHATEVER3

d) Oder du machst einen Einzeiler auf Unix-Seite statt auf dem Windows-Rechner:
 for name in * ; do mv -i $name `echo $name | tr [a-z] [A-Z]` ; done. 

oder (etwas lesbarer)
 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]
Mitglied: 18392
18392 10.10.2005 um 14:57:28 Uhr
Goto Top
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*
Mitglied: Biber
Biber 11.10.2005 um 17:45:09 Uhr
Goto Top
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... face-big-smile

Eigentliche Frage: läuft es denn inzwischen bei Dir mit einer der vorgeschlagenen Strategien?
Mitglied: 18392
18392 12.10.2005 um 10:26:01 Uhr
Goto Top
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 face-smile 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!
Mitglied: Biber
Biber 12.10.2005 um 11:16:54 Uhr
Goto Top
Dafür nich'... face-wink

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
Mitglied: 18392
18392 12.10.2005 um 11:44:56 Uhr
Goto Top
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 face-smile
Mitglied: Biber
Biber 12.10.2005 um 11:52:59 Uhr
Goto Top
Danke! face-wink