citroendsvier
Goto Top

Batch - Dateinamen auslesen, umbenennen + dreistellige Zahl vor bisherigen Dateinamen setzen.

Hallo und guten Morgen,

ich möchte für drei Ordner (2011, 2013, 2014) eine Batch schreiben, die die darin enthaltenen mp3 und m4a's umbenennt. Bisher heißen diese ([Autor] - [Titel]) ; für ein neues System im Haus, das leider nicht mit Titelnummern arbeitet/arbeiten kann, möchte ich die Titelnummern vor den Autor schreiben: ([titelnummer] [Autor] - [Titel]). Absoluter Luxus wäre natürlich, dass er das ganze nur bei neu hinzugefügten Titeln macht, d.h. erkennt, ob die ersten drei Zeichen des Dateinamens drei Ziffern sind und diese Datei dann überspringt (Wäre mit VBS wahrscheinlich einfacher umzusetzen?).

Ich habe leider keine Ahnung, wie ich jeden einzelnen Dateinamen auslesen soll. Evtl wäre es ja schön, die Titelnummer vornean zu schreiben, allerdings kenne ich die Methode hierfür nicht (VBS: fso.getfile.TITELNUMMER)...

Danke für jeden Tipp!

LG DS4 V40

EDIT: Ja, ich habe schon sämtliches durchsucht, hat mir aber nicht weitergeholfen... face-wink
Kommentar vom Moderator Biber am 19.11.2014 um 18:59:53 Uhr
Zitat von @ITvortex:
  • Wie kann ich eine Datei umbennen?
Niemand kann das.

Set /a rgc+=1
#891

Content-ID: 253238

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

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

ITvortex
ITvortex 28.10.2014 aktualisiert um 11:10:13 Uhr
Goto Top
Guten Morgen!

Wenn du dein Problem nicht lösen kannst dann zerlege es in Teil-Probleme!

In deinem Fall:

  • Wie kann ich den Dateinamen auslesen?
  • Wie kann ich eine Datei umbennen?
  • Wie kann ich eine dreistellige Zahl vor den Dateinamen setzen?


Wenn du nun nach den Teilproblemen suchst, wirst du eine Antwort finden.

Versuch die 3 Teilproble zu lösen und setze die Lösungen zu einer zusammen, und schon funktioniert es face-smile

Liebe Grüße
ITvortex
citroendsvier
citroendsvier 28.10.2014 aktualisiert um 14:45:39 Uhr
Goto Top
In meinem Fall:
wie nehme ich mir jede einzelne Datei vor?!
Umbenennen: rename [folgende Datei] xxx+[alter Dateiname]

Da ist mein Problem face-wink

Des weiteren ist wichtig, dass die Titelnummer = der Nummer am Anfang des Dateinamens ist. Aber wie kann ich die Titelnummer auslesen?! (Wenn ich die Dateien auflisten lasse, sind sie alphabetisch sortiert -> wenn ich eine durchlaufende Nummer vergebe, stimmt die Titelnummer nicht mehr.)
ITvortex
ITvortex 28.10.2014 um 15:35:07 Uhr
Goto Top
Dateinamen:
@for /f "delims=" %s in ('dir /b "C:\DeinOrdner\*.mp3"') do @echo %~ns

Zum Beispiel bekommst du so die Dateinamen.... Dann musst du sie halt weiterleiten.. oder was auch immer, darum sag ich ja versuch die Teilprobleme zu lösen oder google explizit danach
citroendsvier
citroendsvier 28.10.2014, aktualisiert am 03.11.2014 um 19:49:55 Uhr
Goto Top
Ich habe das ganze jetzt als VBS geschrieben. Doch in der Loop Schleife am Ende sagt er immer ,,Datei existiert bereits" oder ,,Datei wurde nicht gefunden". Wo liegt mein Fehler?

Danke für deine Hilfe face-wink

'---------------------------------------------------------------------------------------------------------  
' Rename.vbs - Script zum hinzufügen der Titelnummer zum Dateinamen  
'---------------------------------------------------------------------------------------------------------  

Option Explicit
Dim WshShell :		Set WshShell		= CreateObject("WScript.Shell")  
Dim FSO :		Set FSO			= CreateObject("Scripting.FileSystemObject")  
Dim WshApplication :	Set WshApplication 	= CreateObject("Shell.Application")  
Dim tmpBatchRunner, tmpActualFile, Drive, Folder, FolderItem, strHeader, strValue, Year, File, FileNameFile, FileOldName, strNewValue

Year = InputBox("Welches Jahr moechten Sie ueberarbeiten?" & vbCR & "Gültige Eingaben: 2011, 2013, 2014")  

if Not Year = "2011" And Not Year = "2013" And Not Year = "2014" Then WScript.Quit  

Set tmpBatchRunner = FSO.CreateTextFile("Batchrunner.bat", True)  
tmpBatchRunner.writeline("if exist FileNames.txt del FileNames.txt") 	'Batch löscht "FileNames.txt"  
tmpBatchRunner.writeline("dir /b>FileNames.txt") 						'Batch schreibt "FileNames.txt" mit den Namen der Dateien.  
tmpBatchRunner.Close
set tmpBatchRunner = nothing
WshShell.Run "Batchrunner.bat"  

' Dateinamen Zeile für Zeile aus "FileNames.txt" auslesen  

Drive = left(WScript.ScriptFullName, 1)
Set Folder = WshApplication.NameSpace(Drive & ":\Geordnete Musik\" & Year)  
'strHeader = Folder.GetDetailsOf(Folder.Items, 26) 	'26 - Titelnummer  

WScript.Sleep 3000 ' 3 sek  
Set FileNameFile = FSO.OpenTextFile("FileNames.txt",,True)  

Do Until FileNameFile.AtEndOfStream 'Anzahl der Dateien im Ordner %Year%  
	tmpActualFile = FileNameFile.Readline
	if tmpActualFile = "Rename.vbs" or tmpActualFile = "FileNames.txt" or tmpActualFile = "BatchRunner.bat" or tmpActualFile = "" Then  
	Else
		Set File = FSO.GetFile(tmpActualFile)
		Set FolderItem = Folder.ParseName(tmpActualFile)
		strValue = Folder.GetDetailsOf(FolderItem, 26)
	
		select case strValue
			case len(strValue) = 0
				Set strNewValue = nothing
			case len(strValue) = 1 
				strNewValue = "00" & strValue & " "  
			case len(strValue) = 2
				strNewValue = "0" & strValue & " "  
			case len(strValue) = 3
				strNewValue = strValue & " "  
			case len(strValue) > 3
				strNewValue = left(strValue, 3) & " "  
		End Select
		FileOldName = File.Name
		'MsgBox strValue & vbCr & FileOldName  
		File.Name = strNewValue & FileOldName
	End if
Loop

EDIT: Das Folder.GetDetailsOf(..., 26) gibt die Titelnummer zurück face-wink

EDIT EDIT: Das select case ist natürlich falsch... Entschuldigung face-smile Habe jetzt jeden einzelnen Fall durch eine if Abfrage ersetzt, aber wieso hängt er sich nach 50 Titeln auf?

Letzes EDIT: Auch das mehrmalige Öffnen der bat ist überflüssig, sind einige Versuche Aufgrund von Fehlermeldungen gewesen...