Dateien nach Ordner umbenennen
Tach, ich suche eine Möglichkeit Dateien in einem Ordner nach dem Ordnernamen umzubenennen. Und wenn weitere Dateien vorhanden sind, sollten die nach Gröse Sortiert (größtes zuerst) dann das nächst kleinere mit "-2" "-3" enden. Das alles in eine Schleife gepackt, damit ich das bei vielen Ordnern machen kann.
Zum verständnis nochmal:
ordner 1
---DateiX
---DateiY
Ordner 2
---DateiL
---Datei A
---Datei B
Wird zu
Ordner 1
---Ordner 1
---Ordner 1-2
Ordner 2
---Ordner 2
---Ordner 2-1
---Ordner 2-2
Hab hier schon mal ein Gerüst.
Der Code benennt meine Dateinamen so um, dass sie heißen wie der Ordner, in dem sie sich befinden. Leider aber nur je eine Datei pro Endung. Jetzt kommt halt imme die Meldung dass die Datei schon vorhanden ist (wenn mehrere gleiche endungen vorhanden sind). Und da würde ich euch bitten mir weiter zu helfen.
Danke
Greez Schnubbi8718
Zum verständnis nochmal:
ordner 1
---DateiX
---DateiY
Ordner 2
---DateiL
---Datei A
---Datei B
Wird zu
Ordner 1
---Ordner 1
---Ordner 1-2
Ordner 2
---Ordner 2
---Ordner 2-1
---Ordner 2-2
Hab hier schon mal ein Gerüst.
@echo off
FOR /F "delims=" %%i in ('dir /B /AD') do (
FOR /F "delims=" %%j in ('dir "%%i" /B /A-D') do rename "%%i\%%j" "%%i%%~xj"
)
Danke
Greez Schnubbi8718
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 168485
Url: https://administrator.de/contentid/168485
Ausgedruckt am: 25.11.2024 um 22:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo Schnubbi,
könnte so gehen:
In Zeile 9 wird der Name des Verzeichnisses ermittelt, das die umzubenennenden Dateien enthält.
In der
Die einzelnen Erweiterungen werden von der
Die
Die erste Datei eines Typs erhält also schon den Zusatz -1. Ich hoffe das ist auch in Ordnung.
Wenn die Nummerierung unabhängig vom Dateityp sein soll, musst Du Dich nochmal melden.
Gruß
Friemler
[EDIT]
Script geändert:
Jeder Dateityp wird jetzt nur noch einmal in die Variable
[/EDIT]
könnte so gehen:
@echo off
setlocal
set "SrcDir=E:\test"
for /f "delims=" %%d in ("%SrcDir%") do set "ParentDir=%%~nxd"
for /f "delims=" %%f in ('dir /b /a:-d "%SrcDir%" 2^>NUL') do (
set "Item=%%~xf"
call :ConcatString Extensions
)
for %%e in (%Extensions%) do (
set /a Cntr=1
set "Ext=%%e"
for /f "delims=" %%f in ('dir /b /o:-s /a:-d "%SrcDir%\*%%e" 2^>NUL') do (
set "File=%SrcDir%\%%f"
call :RenameFile
set /a Cntr+=1
)
)
exit /b
:RenameFile
ren "%File%" "%ParentDir%-%Cntr%%Ext%"
exit /b
:ConcatString
call set "Compare1=%%%1%%"
call set "Compare2=%%%1:%Item%=%%"
if "%Compare1%" neq "" if "%Compare1%" neq "%Compare2%" exit /b
call set "%1=%%%1%% %%Item%%"
exit /b
In Zeile 9 wird der Name des Verzeichnisses ermittelt, das die umzubenennenden Dateien enthält.
In der
FOR
-Schleife in den Zeile 11 bis 14 werden alle vorkommenden Dateiendungen ermittelt. und in der Variablen Extensions
durch Leerzeichen getrennt abgelegt. Das eigentliche Zusammensetzen der Variablen wird im Unterprogramm ConcatString
erledigt, das den Namen der zusammenzusetzenden Variablen als Parameter erwartet.Die einzelnen Erweiterungen werden von der
FOR
-Schleife in Zeile 16 abgearbeitet.Die
FOR
-Schleife in Zeile 20 ermittelt alle Dateien mit der gerade aktuellen Erweiterung absteigend sortiert nach Größe und ruft das Unterprogramm RenameFile
auf, wo die Umbenennung stattfindet.Die erste Datei eines Typs erhält also schon den Zusatz -1. Ich hoffe das ist auch in Ordnung.
Wenn die Nummerierung unabhängig vom Dateityp sein soll, musst Du Dich nochmal melden.
Gruß
Friemler
[EDIT]
Script geändert:
Jeder Dateityp wird jetzt nur noch einmal in die Variable
Extensions
eingetragen. Dadurch werden überflüssige Umbenennungsversuche vermieden.[/EDIT]
Aloha Schnubbi8718 und willkommen im Forum,
Was natürlich nicht bedeutet: „Wenn es passt, sehen wir eventuell einen grünen Haken aber dich nie wieder“ ... wie es leider so oft vorkommt ... was ist schon Feedback
greetz André
Was natürlich nicht bedeutet: „Wenn es passt, sehen wir eventuell einen grünen Haken aber dich nie wieder“ ... wie es leider so oft vorkommt ... was ist schon Feedback
greetz André
moin,
"eigentlich" schreiben wir doch, um anderen einen Tipp zu geben und nicht, weil wir deren Arbeit machen und weil wir ausschliesslich an den batchen die Änderungsrechte haben.
So geht das nicht...
Hast du dir die restlichen Beiträge vom Friemler mal angesehen?
AFAIK hat der eine Anleitung für die Schleifchen hier hingemalt....
"eigentlich" schreiben wir doch, um anderen einen Tipp zu geben und nicht, weil wir deren Arbeit machen und weil wir ausschliesslich an den batchen die Änderungsrechte haben.
- Im ernst - du willst das für dich und du mußt im Zweifel mal was ändern und dann ist keiner hier?
So geht das nicht...
Hast du dir die restlichen Beiträge vom Friemler mal angesehen?
AFAIK hat der eine Anleitung für die Schleifchen hier hingemalt....
Das bezieht sich jetz immer nur auf ein Verzeichnis. Mein Problem ist, dass ich etwa 900 Verzeichnisse habe.
Geht das irgendwie genauer?- Hast du eine Liste die abgearbeitet werden soll?
- Sind das eh alle?
- Gibt es eine Ausschlußliste, die nicht abgearbeitet werden soll?
Hallo Schnubbi,
Ok, ist nur eine kleine Erweiterung. Nimm das folgende Script. Wundere Dich aber nicht, wenn das bei der Datenmenge eine Weile dauert.
Gruß
Friemler
Ok, ist nur eine kleine Erweiterung. Nimm das folgende Script. Wundere Dich aber nicht, wenn das bei der Datenmenge eine Weile dauert.
@echo off
setlocal
set "SrcDir=E:\test"
for /d %%d in ("%SrcDir%\*.*") do (
set "ActDir=%%d"
call :ProcessDir
)
exit /b
:ProcessDir
for /f "delims=" %%f in ("%ActDir%") do set "ParentDir=%%~nxf"
for /f "delims=" %%f in ('dir /b /a:-d "%ActDir%" 2^>NUL') do (
set "Item=%%~xf"
call :ConcatString Extensions
)
for %%e in (%Extensions%) do (
set /a Cntr=1
set "Ext=%%e"
for /f "delims=" %%f in ('dir /b /o:-s /a:-d "%ActDir%\*%%e" 2^>NUL') do (
set "File=%ActDir%\%%f"
call :RenameFile
set /a Cntr+=1
)
)
exit /b
:RenameFile
ren "%File%" "%ParentDir%-%Cntr%%Ext%"
exit /b
:ConcatString
call set "Compare1=%%%1%%"
call set "Compare2=%%%1:%Item%=%%"
if "%Compare1%" neq "" if "%Compare1%" neq "%Compare2%" exit /b
call set "%1=%%%1%% %%Item%%"
exit /b
Gruß
Friemler
Aloha,
ah der T-Mo hat einfach gesagt, die Nase dick, dass oftmals nur Leute kommen, ein Skript wollen und wieder gehen und er eigentlich der (durchaus berechtigten) Meinung ist, man sollte hier den Usern nur helfen und nicht deren Arbeit abnehmen .. allerdings ist das immer relativ *gg* ob man gerade Lust hat, ein ganzes Skript zu entwerfen oder nicht (zumindest geht mir das so). Der T-Mo fragt also erst einmal, wie die ganze Dimension aussieht (mache ich auch oft), um dann mit dem Satellitenüberblick einzelne Vorstöße zu geben *lach*. allerdings verstehen viele (vor allem Eintages-)Enduser den T-Mo nicht und halten seine konstruktiven Beiträge für Bitte das Wort deiner Wahl einfügen ... der arme
greetz André
P.S.: Hm, gut, wir wurden von einem anderen Board empfohlen - sehr schön ^_^
ah der T-Mo hat einfach gesagt, die Nase dick, dass oftmals nur Leute kommen, ein Skript wollen und wieder gehen und er eigentlich der (durchaus berechtigten) Meinung ist, man sollte hier den Usern nur helfen und nicht deren Arbeit abnehmen .. allerdings ist das immer relativ *gg* ob man gerade Lust hat, ein ganzes Skript zu entwerfen oder nicht (zumindest geht mir das so). Der T-Mo fragt also erst einmal, wie die ganze Dimension aussieht (mache ich auch oft), um dann mit dem Satellitenüberblick einzelne Vorstöße zu geben *lach*. allerdings verstehen viele (vor allem Eintages-)Enduser den T-Mo nicht und halten seine konstruktiven Beiträge für Bitte das Wort deiner Wahl einfügen ... der arme
greetz André
P.S.: Hm, gut, wir wurden von einem anderen Board empfohlen - sehr schön ^_^