Datei-Datum aus Tag YEAR an die Datei übergeben

Hallo,

ich habe alle MP3 meiner Sammlung mit ihrem Erscheinungsjahr getaggt und möchte nun jeder Datei dieses Datum als Datidatum verpassen.

Der Weg andersherum wurde im Forum schon vorgestellt.

Ich hatte ChatGPT gefragt; da werden mit Lösungen angeboten, die aber gar nicht im MP3TAG implementiert sind:

Convert → Tag → Filename oder „Dateizeitstempel → Tag“ / „Tag → Dateizeitstempel“ oder Aktion hinzufügen vom Typ: „Dateizeitstempel anpassen“

Besteht bei MP3TAG überhaupt diese Möglichkeit?

viele Grüße

Zeig uns bitte ein ganz konkretes Muster, wie Dein Dateiname schlussendlich aussehen soll. Dann können wir besser aufzeigen, wie das aus Mp3tag gelöst werden kann.

Wenn Du wirklich den Dateizeitstempel Deiner Musikdatei verändern willst, also einer dieser 3 Eigenschaften:


das sind keine Tags oder Feldnamen, das sind Windows-Dateieigenschaften. Die kann man nicht einfach so aus Mp3tag verändern. Die werden von Deinem Windows verwaltet.

Als Ergänzung: ggf. gibt es ein Programm, das per Kommandozeile aufgerufen werden kann und dem Zeitdaten übergeben werden können, siehe z.B. diesen Thread:

Dafür benötigt man nicht mal ein separates Programm, nur ein paar PowerShell-Script-Zeilen.

Danke für Eure Infos.

Ich habe eine Lösung über TAKECOMMANDER gefunden. Die MP3 lese ich nach XL aus, erweitere jede Zeile um den Befehl TOUCH und verpasse der jeweiligen Datei das Datum aus dem Tag YEAR. Danach kopiere ich die Zeilen in eine Textdatei, die ich in BTM (BAT) umbenenne.

Für alle zukünftigen Leser, die lieber nicht 4 verschiedene Tools (Takecommander, Excel, Touch, BTM) und manuelle Anpassungen ausführen möchten, um die Dateidaten zu verändern, stelle ich dieses Copy & Paste-Codebeispiel bereit:

  1. Man nimmt das folgende PowerShell v5-Script und speichert es z.B. als setdate.ps1 ab.
    Wer NICHT alle 3 Daten (Erstellt:, Geändert:, Letzter Zugriff:) auf das neue Datum ändern möchte, kann vor die nicht erwünschten Zeilen einfach ein # Zeichen setzen und damit die Zeile ausser Kraft setzen.
    Z.B. würde # $file.LastAccessTime = $date das Letzter Zugriff:-Datum nicht mehr anpassen.

param(
	[string]$Path,
	[string]$Year,
	[string]$ReleaseDate
)

if (!(Test-Path $Path)) {
	Write-Warning "Datei nicht gefunden: $Path"
	exit
}

try {
	# Priorität: ReleaseDate > Year
	if ($ReleaseDate -match '^\d{4}-\d{2}-\d{2}$') {
		$date = [datetime]::ParseExact($ReleaseDate, 'yyyy-MM-dd', $null)
	}
	elseif ($Year -match '^\d{4}$') {
		$date = Get-Date "$Year-01-01"
	}
	else {
		Write-Warning "Kein gültiges Datum für: $Path"
		PAUSE
		exit
}
	$file = Get-Item $Path
	$file.CreationTime  = $date
	$file.LastWriteTime = $date
	$file.LastAccessTime = $date

	Write-Host "OK: $Path -> $date"

} catch {
	Write-Warning "Fehler bei $Path : $_"
}

PAUSE
  1. In Mp3tag erfasst man einen neuen Eintrag unter File -> Options -> Tools und erfasst folgende Angaben:
    Name: Beliebiger Text zur Wiedererkennung dieses Datums-Änderungs-Tools
    Path: Den Pfad wo die eigene PowerShell.exe steckt, unter Windows 11 z.B. in
    C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
    Parameter: -NoProfile -ExecutionPolicy Bypass -File "C:\Temp\mp3-Test\Dateidaten aus year oder releasedate setzen\setdate.ps1" -Path "%_path%" -Year "%year%" -ReleaseDate "%releasedate%"
    Natürlich muss man den Pfad zur eigenen setdate.ps1 anpassen.
    Die restlichen Optionen kann man so stehen lassen.
    Sie übergeben entweder ein vorhandenes YEAR oder ein RELEASEDATE an das PowerShell-Script.

Wendet man dieses Tool auf eine ausgewählte Datei an, sieht die Musikdatei mit einem YEAR 1923 in den 3 Eigenschaften im Windows-Explorer so aus:


Letzter Zugriff wird allerdings nur bis zum nächsten effektiven Zugriff halten.

Wenn man ein RELEASEDATE mit 1987-03-04 übergibt, sehen die Eigenschaften so aus:

Wer nun lieber den Inhalt eines anderen vorhandenen Felds übergeben will, der passt einfach den Feldnamen in %-Zeichen in den Tools-Parametern an (anstelle von %year% oder %releasedate%).

Das PowerShell-Script prüft nicht jede erdenkliche Formatierung von Jahren und Monaten und Tagen, sondern geht vom Format YYYY und YYYY-MM-DD aus. Bei YYYY wird immer -01-01 fix gesetzt.

Das PowerShell-Script prüft nicht jede erdenkliche Fehlerquelle (wie z.B. schreibgeschützte Dateien). Wer sowas gerne möchte, kann das Script selbstverständlich nach eigenen Anforderungen anpassen.

Wer keine Ausgabe auf der Kommandozeile sehen will, kann die 2 x PAUSE Befehle im PowerShell-Script ganz weglassen.

Bei Fragen könnt Ihr Euch einfach melden. Obwohl ich das Script bei mir getestet habe, kann ich keinerlei Verantwortung für irgendwelche Nebenwirkungen oder Abweichungen übernehmen. Testet es also gründlich und nur mit zuvor gesicherten Dateien.

Und der Vollständigkeit halber:
Wer seine Datensicherung aufgrund dieser 3 Daten macht, sollte sich sehr gut überlegen, was er mit dieser Manipulation allenfalls negativ beeinflusst.

cool, super!

2