patrick1988
Goto Top

Dateinamen über CMD abschneiden

Hallo,

ich habe eine wahrscheinlich für euch relativ leicht zu beantwortende Frage.

Ich habe Dateien mit folgender Bezeichnung:

BODY-PHANTOM.CT.THORAX_THNATIV_(ADULT).0009.0001.2013.04.10.20.17.36.803718.50570424

Da in einem Ordner sehr viele dieser Files sind und ich die fortlaufende Nummer am Ende für weitere Verwendungen brauche (hier die 0001) müsste ich diesen Filenamen ab dieser Ziffer abschneiden.

Manuell ist das leider zu aufwenig, da es über 100 dieser Dateien sind.

Gibt es eine Möglichkeit über das CMD diese Dateinamen zu kürzen (rename)?

Vielen Dank für Eure Antworten.

Beste Grüsse

Patrick

Content-Key: 205075

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

Printed on: April 19, 2024 at 15:04 o'clock

Member: bastla
bastla Apr 16, 2013 updated at 13:08:52 (UTC)
Goto Top
Hallo Patrick1988 und willkommen im Forum!

Wäre demnach der gewünschte neue Dateiname "0001.2013.04.10.20.17.36.803718.50570424"?

Falls ja: Nach welcher Systematik kann die Aufteilung erfolgen (weshalb würde zB "0009" wegfallen), und ist das Namensschema (mit Trennung durch "." und/oder "_") für alle Dateien gleich?

Grüße
bastla
Member: colinardo
colinardo Apr 16, 2013 updated at 13:33:11 (UTC)
Goto Top
Hi Patrick1988,
hier ein VBS-Script - Ordner noch in Zeile 2 angeben.

Unterschiedliche RegularExpression-Patterns für Zeile 8 (je nach Anforderung):
Ich gehe davon aus das dieses Muster bei allen Dateien gleich bleibt 0000.0001, also 4 Zahlen "." 4 Zahlen

Extrahiert alles von Anfang an bis ....0001
myRegExp.Pattern = "^(.*\.\d{4}\.\d{4}).*$"
Extrahiert 0001... und den Rest des Namens:
myRegExp.Pattern = "^.*\.\d{4}\.(\d{4}).*)$"

VBS-Script
Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
Set rootFolder = fso.GetFolder("C:\temp\")  

For Each file In rootFolder.Files
	Dim newFilename
	Set myRegExp = New RegExp
	myRegExp.IgnoreCase = True
	myRegExp.Pattern = "^(.*\.\d{4}\.\d{4}).*$"  
	Set myMatches = myRegExp.Execute(file.Name)
	If myMatches.Count >= 1 Then
		Set myMatch = myMatches(0)
		If myMatch.SubMatches.Count >= 1 Then
			newFilename = myMatch.SubMatches(0)
			file.name = newFilename
		End If
	End If
Next

Grüße Uwe
Member: Dilbert-MD
Dilbert-MD Apr 16, 2013 at 14:38:15 (UTC)
Goto Top
Würde es auch eine Software (Freeware) tun?
Schau Dir mal die Funktionen von AntRenamer oder ähnlichen Programmen an.
Gruß
Holger
Member: Patrick1988
Patrick1988 Apr 16, 2013 at 14:47:59 (UTC)
Goto Top
Hallo bastla,

nein ich brauche den vorderen Teil so dass die Endung dann lautet ...0001
Es waren bei jedem Dateinamen die vorderen 49 Zeichen (falls ich mich jetzt nicht verzählt habe)

Danke für die schnelle Antwort.
Member: bastla
bastla Apr 16, 2013 at 20:52:54 (UTC)
Goto Top
Hallo Patrick1988!

Ich komme nur auf 48 Zeichen - soferne keines davon ein "!" und die Zeichenanzahl tatsächlich konstant ist, könnte das so gehen:
@echo off & setlocal enabledelayedexpansion
set "Ordner=D:\Dein Ordner"  

pushd "%Ordner%"  
for /f "delims=" %%i in ('dir /b/a-d') do (  
    set "Name=%%i"  
    echo ren "%%i" "!Name:~,48!"  
)
popd
pause
Wegen des "echo" vor dem "ren" läuft der Batch als Demo - es werden die Umbenenn-Befehle nur angezeigt, aber nicht ausgeführt. Wenn das Ergebnis gut aussieht, kannst Du das "echo" entfernen und ernst machen ...

Grüße
bastla
Member: Patrick1988
Patrick1988 Apr 17, 2013 at 08:59:29 (UTC)
Goto Top
Hallo bastla,

Hat alles wie gewollt funktioniert.
Vielen Dank an dich und auch die anderen Antworten.

Tolles Forum!

Grüsse

Patrick