d4shoernchen
Goto Top

Zahlen in Dateinamen entfernen, durch Zufall welche hinzufügen

Guten Morgen, Community.

Dies ist wahrscheinlich eine Aufgabe für unseren @bastla, gerne nehme ich aber auch Hilfe von anderen Personen an.

Hier mein Anliegen.

Ich habe ein Verzeichnis mit mehreren Dateien, die unterschiedlich heißen. Einige Dateinamen mit Zahlen drin, andere wieder nicht.

Nun möchte ich das alle Zahlen aus dem Dateinamen entfernt werden. Danach sollen die Dateien neu mit Zahlen versehen werden, die vorne an den Dateinamen gehangen werden.

Versuche es anhand eines Beispieles zu erklären:

Verzeichnis Musik
Datei 1: lied.mp3
Datei 2: lied-2.mp3
Datei 3: 3-lied.mp3

Script macht aus den Dateien dann zuerst "lied.mp3, lied-.mp3 und -lied.mp3". Nun soll das Script erkennen, wie viele Dateien es sind. In dem Fall 3 und fügt nun die Zahlen 1-3 bzw. 001-003 inkl. "-"vorne an die Dateinamen und das willkürlich:

Datei 1: 001-lied-.mp3
Datei 2: 002--lied.mp3
Datei 3: 003-lied.mp3

Hoffe ihr könnt mir helfen.

Gruß
d4shoerncheN

Content-Key: 197558

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

Printed on: April 23, 2024 at 09:04 o'clock

Member: colinardo
colinardo Jan 24, 2013 updated at 12:19:26 (UTC)
Goto Top
Das müsste gehen:
(Verzeichnis mit den MP3 Dateien in Zeile 3 eintragen)
@echo off
setlocal ENABLEDELAYEDEXPANSION
set searchdir=C:\Musik\
set searchextension=*.mp3
set counter=1
cd /d "%searchdir%"  
for /f "tokens=*" %%i IN ('dir /b /A-D "%searchdir%%searchextension%"') DO @(  
	call :removenumbers "%%i"  
	echo !filename!
        move "%%i" "!filename!"  
	set /A counter=!counter!+1
)
goto end

:removenumbers
set filename=%~1
set extension=%filename:~-4%
set filename=%filename:~,-4%
for /L %%k in (0,1,9) DO @( 
	set filename=!filename:%%k=!
)
set filename=00%counter%-%filename%%extension%
goto :eof

:end
pause
Member: d4shoerncheN
d4shoerncheN Jan 24, 2013 at 10:13:46 (UTC)
Goto Top
Hallo, colinardo.

Vielen Dank für die schnelle Antwort. In der Shell zeigt er die Dateien nun wie gewünscht an, bis dahin funktioniert es also.

Gruß
Member: colinardo
colinardo Jan 24, 2013 at 10:15:25 (UTC)
Goto Top
Zur Info: Habe das Script oben mit der Umbenennen Funktion ergänzt

Grüße Uwe
Member: d4shoerncheN
d4shoerncheN Jan 24, 2013 updated at 10:22:50 (UTC)
Goto Top
Hallo,

habe ich auch gerade versucht. Sowohl mit als auch ohne
rem ren %%i !filename!
funktioniert es. Dateien zeigt er korrekt an, umbenennen tut er leider nicht.

NACHTRAG
Mein Fehler, funktioniert nun. Vielen Dank face-smile
Habe die komplette Zeile entfernt, nicht nur das "rem".

NACHTRAG 2
Gerade bemerkt, Script funktioniert leider nicht, wenn in dem Dateinamen ein Leerzeichen ist. Kann man eventuell das Script anpassen, dass er aus Leerzeichen "-" macht?

Gruß
Member: colinardo
colinardo Jan 24, 2013 updated at 10:28:20 (UTC)
Goto Top
Jetzt geht es mit Leerzeichen im Namen ... sorry

Ich lege Dir folgende Seite ans Herz (Alles rund um Stringmanipulationen per Batch):
http://www.dostips.com/DtTipsStringManipulation.php#Snippets.Remove
Member: d4shoerncheN
d4shoerncheN Jan 24, 2013 at 10:27:29 (UTC)
Goto Top
Bekomme
001-------test.txt
002------test-.txt
003------test.txt
004-Neues
Das System kann die angegebene Datei nicht finden.
Drücken Sie eine beliebige Taste . . .
Member: colinardo
colinardo Jan 24, 2013 updated at 12:19:06 (UTC)
Goto Top
Ahhhh... hatte das "tokens=* in der ersten for-Schleife vergessen.
Habe das Script oben korrigiert jetzt läufts mit Leerzeichen im Namen!

eine kürzere Variante noch als Nachtrag:

@echo off
setlocal ENABLEDELAYEDEXPANSION
set searchdir=C:\Musik\
set searchextension=*.mp3
set counter=1
cd /d "%searchdir%"  
for /f "tokens=*" %%i IN ('dir /b /A-D "%searchdir%%searchextension%"') DO (  
	set filename=%%i
 	set extension=!filename:~-4!
	set filename=!filename:~,-4!
	for /L %%k in (0,1,9) DO @( 
		set filename=!filename:%%k=!
	)
	set finalname=00!counter!-!filename!!extension!
	echo !finalname!
        move "%%i" "!finalname!"  
	set /A counter=!counter!+1
)
Member: d4shoerncheN
d4shoerncheN Jan 24, 2013 at 11:20:03 (UTC)
Goto Top
Funktioniert, besten Dank.

Gruß
d4shoerncheN
Mitglied: 106543
106543 Jan 24, 2013 updated at 11:33:01 (UTC)
Goto Top
Hi du,

hab bei euch mal mitgelesen und muss leider sagen, dass es bei mir nicht funktioniert face-sad
ja ich habe den Pfad angepasst auf C:\
ja ich hab da eine Testdatei namens Testosteron.mp3 erstellt.
habs dann mal anlaufen lassen und erstmal nichts passiert.
Nachdem ich dann ein "Pause" eingefügt habe, gibt er mir den richtigen neuen Dateinamen aus (logisch ist ja echo) und in der nächsten Zeile schreibt er
Das System kann die angegebene Datei nicht finden.
liegt der fehler bei mir oder beim Skript ?
Nebenbei wahnsinnig schnell das Ganze zusammengebaut face-smile meinen Respekt

Grüße
Exzellius

PS: hab die verkürzte Version des Skriptes genommen

[EDIT]
Entwarnung !
Hab anscheinend nicht die Berechtigung zum Umbenennen auf C:\ -_-
ich hab die Datei zwar selbst erstellt, aber egal.
Sobald ich die Datei in meine Eigenen Dateien gelegt habe funktioniert alles wie gewünscht.
[/EDIT]
Member: colinardo
colinardo Jan 24, 2013 at 11:32:22 (UTC)
Goto Top
dann musst du noch auf das jeweilige Laufwerk wechseln wenn du das Script von einem anderen Laufwerk aus aufrufst:
z.b mit
c:

baue das noch oben in das Script mit ein ...
Mitglied: 106543
106543 Jan 24, 2013 at 11:34:02 (UTC)
Goto Top
Oder das :D jo danke dir hast mir sehr geholfen.

Grüße
Exzellius
Member: bastla
bastla Jan 24, 2013 at 12:14:50 (UTC)
Goto Top
@ colinardo
Anstelle von Kunststücken wie
%searchdir:~0,2%
cd "%searchdir%"  
(wobei Du Dich auch noch darauf verlassen musst, dass der Pfad tatsächlich mit einer Laufwerksangabe beginnt) würde sich vielleicht ein
cd /d "%searchdir%"
aufdrängen (wenn schon kein PushD / PopD benötigt werden sollte) ...

Grüße
bastla
Member: colinardo
colinardo Jan 24, 2013 at 12:18:32 (UTC)
Goto Top
merci @bastla , man lernt halt immer was dazu !