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 =)
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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.
Content-ID: 165741
Url: https://administrator.de/forum/stringbegrenzung-in-nem-for-befehl-165741.html
Ausgedruckt am: 22.12.2024 um 03:12 Uhr
9 Kommentare
Neuester Kommentar
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:
Zum Testen werden (wegen des "
BTW: Im Zweifelsfall würde ich "
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
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"
)
echo
") die Umbenenn-Befehle nur angezeigt.BTW: Im Zweifelsfall würde ich "
tokens=1
" ersatzlos streichen ... 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 ...
Grüße
bastla
Aloha,
du könntest es (getestet) z.B. so durchführen
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
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 - stimmt ist ja /s
mit dabei
Hallo fame.styler!
Grüße
bastla
P.S.: Leerzeichen vor und nach "
... und mit
bekommst Du bei Deiner Schleife den gesamten Pfad in die Variable ...
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
Moin Skyemugen,
brauchst jetzt kein XP nachinstallieren -es geht auch da:
Vorher:
Nachher:
@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]
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
>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]
@Skyemugen
@Biber
Grüße
bastla
"%~dpnx1"
ist Overkill (%1
täte es auch - nach einem "dir /b /s
" hast Du immer einen kompletten Pfad) ... @Biber
ja, so wie du es angedacht hast ginge es auch
Nicht wirklich - in "%name%
" wäre der volle Pfad enthalten ...Grüße
bastla