sinixnd
Goto Top

Stringbegrenzung in nem For-Befehl

Hi Leute, ich will von einem Ordner alle Dateien, die mit einem Kleinbuchstaben anfangen, umbennen, sodass Alle mit einem Großbuchstaben beginnen. Eigentlich müsste dass mit einer Batch realisierbar sein... hoffe ihr könnt mir helfen =)

 
set VarA=a
set VarB=b
::und so weiter

for /f "tokens=1 delims=" %%i IN ('dir /b /s /A-d *.MP3') DO (  
if %%i:~0,1% == VarA ren %%i A%%i:~1,%
if %%i:~0,1% == VarB ren %%i B%%i:~1,%
::und so weiter
)

Das ist jetzt aber nur eine schnell entworfene Rohform... eine fixe Idee, mehr nicht ;)

Es soll, wenn der erste Buchstabe klein ist, die Datei mit einem Großbuchstaben statt einem Kleinbuchstagen am Anfang umbenennen... aber das if %%i:~0,1% geht nicht, geht sowas überhaupt in einem for befehl ?


hoffe ihr könnt mir helfen

PS.: Hintergrund ist folgender: Ich hab heute eine Große Menge Daten zu verwalten (musik ;D) und hab aber manche von den Liedern doppelt. Da ich mir nicht sicherbin, ob Windows bei Groß- und Kleinbuchstaben Unterschiede kennt (denke mal ja) und ich gern Batchskripte entwerfe, will ich dafür also ein Skript machen, aber es funktioniert halt nich so wie es soll ;)

Danke schon mal
Kommentar vom Moderator Biber am 05.05.2011 um 19:37:52 Uhr
Ich will von einem Ordner alle dateien die mit einem kleinbuchstaben anfangen umbennen
set /a rgc+=1
#750
Ausgerechnet so ein hingeschlurter Beitrag bekommt den Jubiläums-RGC. face-sad

Content-ID: 165741

Url: https://administrator.de/forum/stringbegrenzung-in-nem-for-befehl-165741.html

Ausgedruckt am: 22.12.2024 um 03:12 Uhr

bastla
bastla 05.05.2011 um 19:44:04 Uhr
Goto Top
Hallo fame.styler (auch wenn Du auf eine Begrüßung keinen besonderen Wert zu legen scheinst)!

Falls Du das nicht unbedingt mit native Batch erledigen willst:
@echo off & setlocal

set "M=%temp%\MakeProperCase.vbs"  
>%M% echo T=WScript.Arguments(0):WScript.Echo UCase(Left(T,1))^&Mid(T,2)

for /f "tokens=1 delims=" %%i IN ('dir /b /s /A-d *.MP3') DO (  
    for /f %%a in ('cscript /nologo %M% "%%~nxi"') do echo ren "%%i" "%%a"  
)
Zum Testen werden (wegen des "echo") die Umbenenn-Befehle nur angezeigt.

BTW: Im Zweifelsfall würde ich "tokens=1" ersatzlos streichen ... face-wink
Doch noch ein Batch-Hinweis: Es können von Schleifenvariablen keine Teilstrings gebildet werden - daher wäre eine Zuweisung an eine Variable wie zB %Name% und entweder "delayedExpansion" oder ein Unterprogramm erforderlich ...

... und auch dann müsste vermutlich eine Umbenennung auf einen temporären Namen und von diesem auf den gewünschten neuen Namen erfolgen. [Edit] inzwischen getestest [/Edit]

Grüße
bastla
SinixND
SinixND 05.05.2011 um 20:44:24 Uhr
Goto Top
kannst du mir dazu ein skript posten?? =)

oder funktioniert ees so auch
FOR %%i IN ('dir /b /s /A-d *.mp3') DO (  

SET name=%%i
if %name:~0,1% == a ren %name% A%name:~1,%

)
Skyemugen
Skyemugen 05.05.2011 um 20:52:22 Uhr
Goto Top
Aloha,

du könntest es (getestet) z.B. so durchführen

@echo off & setlocal
for /f "delims=" %%i IN ('dir /b /s /a-d *.mp3') do call :Ablauf "%%i"  
pause
goto :eof

:Ablauf
set "Datei=%~n1"  
set "Anfang=%Datei:~0,1%"  
set "Anfang=%Anfang:a=A%"  
REM bitte selber fortfuehren
set "Anfang=%Anfang:h=H%"  
REM bitte selber fortfuehren
ren %1 "%Anfang%%Datei:~1%%~x1"  
goto :eof

greetz André

P.S.: Die Direktumbenennung (ohne temporär) funktioniert unter Windows 7 einwandfrei, bin mir aber bei Windows XP nicht sicher (und kann es jetzt auch nicht testen) ...
@Biber: aha, gut, dann muss ich nicht bis morgen warten, zum Testen xD

edit: oh, ich war wohl wieder zu kompliziert am Werk xD ich mag kein delayedexpansion ^_^
@bastla, hm, dachte der nimmt dann den Pfad nicht mit ... frag' mich nicht warum, ist schon spät und Monty Python läuft, da habe ich nur den Dateinamen im Kopf gehabt ... wobei ich mir im Skript dann mit %~n1 selbst im Gedanken widerspreche face-smile - stimmt ist ja /s mit dabei
bastla
bastla 05.05.2011 um 20:59:12 Uhr
Goto Top
Hallo fame.styler!
kannst du mir dazu ein skript posten?? =)
Was meinst Du damit - da oben steht eines ...
Da ich mir nicht sicherbin, ob Windows bei Groß- und Kleinbuchstaben Unterschiede kennt (denke mal ja)
Was Dateinamen angeht, ist Groß-/Kleinschreibung in Windows egal ...

Grüße
bastla

P.S.: Leerzeichen vor und nach "==" sind keine gute Idee ...

... und mit
SET name=%%i
bekommst Du bei Deiner Schleife den gesamten Pfad in die Variable ...
Biber
Biber 05.05.2011 um 21:01:04 Uhr
Goto Top
Moin Skyemugen,

brauchst jetzt kein XP nachinstallieren -es geht auch da:

Vorher:
>dir /b /s /A-d f:\i*.jpg
f:\Transfer\IMG_0095.JPG
f:\Jokes\holger\neuebilder\ich-zuerst.jpg
f:\Jokes\holger\neuebilder\irrtum.jpg irrtum
Nachher:
>for /f "delims=" %i IN ('dir /b /s /A-d f:\i*.jpg') DO @(set "xx=%~nxi" & @if "!xx:~0,1!"=="i" ren "%i" "I!xx:~1!")

(=20:55:45  D:\temp=)
>dir /b /s /A-d f:\i*.jpg
f:\Transfer\IMG_0095.JPG
f:\Jokes\holger\neuebilder\Ich-zuerst.jpg
f:\Jokes\holger\neuebilder\Irrtum.jpg

@foen-styler

ja, so wie du es angedacht hast ginge es auch - allerdings nur mit DelayedExpansion und der Schreibweise !var! statt %var%.
So wie in meiner CMD-Zeile.
---> ... if "!xx:~0,1!"=="i" ren "%i" "I!xx:~1!")

Grüße
Biber
[Edit] Falsches "Vorher"-Beispiel berichtigt. [/Edit]
[Edit2] @bastla wg. "so ginge es auch.."
-> gemeint war nur der Plan "wenn erstes Zeichen 'a' ist dann mach "A" und den Rest-Originalnamen ab Pos.2" usw von [a-z]
[/Edit2]
bastla
bastla 05.05.2011 um 21:08:11 Uhr
Goto Top
@Skyemugen
"%~dpnx1" ist Overkill (%1 täte es auch - nach einem "dir /b /s" hast Du immer einen kompletten Pfad) ... face-wink
@Biber
ja, so wie du es angedacht hast ginge es auch
Nicht wirklich - in "%name%" wäre der volle Pfad enthalten ...

Grüße
bastla
SinixND
SinixND 05.05.2011 um 21:37:11 Uhr
Goto Top
Hi bastla,


kannst du mir dazu ein skript posten?? =)


damit meine ich das was biber inzwischen schon beantwortet hat ;)


[Edit2] @bastla wg. "so ginge es auch.."
-> gemeint war nur der Plan "wenn erstes Zeichen 'a' ist dann mach "A" und den Rest-Originalnamen ab Pos.2" usw von [a-z]
[/Edit2]

Ansonst mal wieder Danke an alle die so hilfreich mitgeholfen haben... es hat natürlich funktioniert ;) was sonst xD

fame.styler

PS.: @Biber: wegen deinem Kommentar über den schludrigen Beitrag ;) ich habs nochmal ein wenig überarbeitet.. war vorher bissl im Stress und a weng schlecht drauf und hab "nur schnell" gepostet ;) aber ich hoffe dass die Form jetzt ansprechender ist =)
Nix für ungut ;)

PPS.: kann man nachträglich Zitate einbauen? <- hat sich ja inzwischen erledigt.. ;)
bastla
bastla 05.05.2011 um 22:15:17 Uhr
Goto Top
Hallo fame.styler!

Nur interessehalber: Was spricht aus Deiner Sicht gegen (für String- oder zB auch Datumsverarbeitung besser als Batch geeignetes) VBS (wenn es dazu noch in einen Batch integriert ist)?

Grüße
bastla

P.S.: Zum Thema "Zitat" (bzw entsprechender Formatierung):
SinixND
SinixND 05.05.2011 um 22:34:44 Uhr
Goto Top
naja. erstens kenn ich mich mit VBS nich so gut aus wie mit Batch und ich mach immer lieber alles einheitlich. also entweder Batch, oder VBS... is zwar im Grunde ne blöde Einstellung aba naja und solangs mit Batch auch geht ;)