Dateien aus verschiedenen Ordnern umbenennen und in neue Datei speichern
Hallo zusammen,
ich habe einen PC mit Windows 7 Prof. und einen Laptop mit Windows 10 Home.
Darauf sollen auch die Batch-Proramme laufen.
Mein Anliegen:
Ich habe eine Anzahl von Ordern mit Unterdateien.
Die Unterdateien sind alle .mp3-Dateien.
Es sollen nun diese Unter-Dateien umbenannt werden.
Als Beispiel:
unter dem Ordner <42 kkkkk> stehen folgende .mp3-Dateien.
01 - The City Of New Orleans.mp3
02 - Bye, Bye Fraeulein.mp3
03 - All I know.mp3
04 - Kiss and Say Goodbye.mp3
05 - Huh Babe (Uh! Babe).mp3
06 - Nothing Compares 2 U.mp3
Die Anzahl der .mp3- Dateien kann varieren .. bis zu 40
Von den übergeordneten Ordnern gibt es auch mehrere
wie oben zu sehen --> 42.
Ich will nun von allen übergeorneten Ordnern (wie hier 42 kkkkk )
die darunterliegenden .mp3-Dateien umbenennen.
Statt 01 - The City Of New Orleans.mp3 soll auf
0001 The City Of New Orleans.mp3 umbenannt werden
und dann fortlaufend bis irgendwann 0111 und weiter.
Alle umgewandelten .mp3-Dateien sollen dann, wenn die letzte
Datei erreicht ist auf einen vorbestimmten Zielordner (frei wählbar über Variable)
kopiert werden. Gleichzeitig soll die letzte Nummer, entsprechend der Anzahl
der .mp3-Dateien im Ordner (hier 42 kkkkk ) als Zahl (hier 0006) übergeben
werden. Diese Zahl wird benötigt für den nächsten Ordner um die
darunterliegenden .mp3-Dateien weiterzuzählen und wieder auf den
vorbestimmten Zielordner zu kopieren.
Was noch wichtig ist, der Adresspfad von allen Ordnern (wie hier 42 kkkkk )
unter denen .mp3-Dateien liegen wird von mir als Variable bereitgestellt.
Ich hoffe daß durch diese Beschreibung mein Anliegen in ein
Batch-Programm umgesetzt werden kann.
In Batch-Prorammierung bin ich noch ein blutiger Anfänger, deshalb wäre
es schön, wenn das Programm auch erläutert würde. Denn ich will auch
verstehen warum es so programmiert wurde, denn die Beschreibung
unter Help im DOS-Promt ist nur für Fortgeschrittene zu verstehen.
Beste Grüße
Grikolla
ich habe einen PC mit Windows 7 Prof. und einen Laptop mit Windows 10 Home.
Darauf sollen auch die Batch-Proramme laufen.
Mein Anliegen:
Ich habe eine Anzahl von Ordern mit Unterdateien.
Die Unterdateien sind alle .mp3-Dateien.
Es sollen nun diese Unter-Dateien umbenannt werden.
Als Beispiel:
unter dem Ordner <42 kkkkk> stehen folgende .mp3-Dateien.
01 - The City Of New Orleans.mp3
02 - Bye, Bye Fraeulein.mp3
03 - All I know.mp3
04 - Kiss and Say Goodbye.mp3
05 - Huh Babe (Uh! Babe).mp3
06 - Nothing Compares 2 U.mp3
Die Anzahl der .mp3- Dateien kann varieren .. bis zu 40
Von den übergeordneten Ordnern gibt es auch mehrere
wie oben zu sehen --> 42.
Ich will nun von allen übergeorneten Ordnern (wie hier 42 kkkkk )
die darunterliegenden .mp3-Dateien umbenennen.
Statt 01 - The City Of New Orleans.mp3 soll auf
0001 The City Of New Orleans.mp3 umbenannt werden
und dann fortlaufend bis irgendwann 0111 und weiter.
Alle umgewandelten .mp3-Dateien sollen dann, wenn die letzte
Datei erreicht ist auf einen vorbestimmten Zielordner (frei wählbar über Variable)
kopiert werden. Gleichzeitig soll die letzte Nummer, entsprechend der Anzahl
der .mp3-Dateien im Ordner (hier 42 kkkkk ) als Zahl (hier 0006) übergeben
werden. Diese Zahl wird benötigt für den nächsten Ordner um die
darunterliegenden .mp3-Dateien weiterzuzählen und wieder auf den
vorbestimmten Zielordner zu kopieren.
Was noch wichtig ist, der Adresspfad von allen Ordnern (wie hier 42 kkkkk )
unter denen .mp3-Dateien liegen wird von mir als Variable bereitgestellt.
Ich hoffe daß durch diese Beschreibung mein Anliegen in ein
Batch-Programm umgesetzt werden kann.
In Batch-Prorammierung bin ich noch ein blutiger Anfänger, deshalb wäre
es schön, wenn das Programm auch erläutert würde. Denn ich will auch
verstehen warum es so programmiert wurde, denn die Beschreibung
unter Help im DOS-Promt ist nur für Fortgeschrittene zu verstehen.
Beste Grüße
Grikolla
Please also mark the comments that contributed to the solution of the article
Content-Key: 3978819410
Url: https://administrator.de/contentid/3978819410
Printed on: September 28, 2023 at 07:09 o'clock
21 Comments
Latest comment
Moin,
ein paar kurze Statements von mir dazu:

Gruß
Doskias
ein paar kurze Statements von mir dazu:
ich habe einen PC mit Windows 7 Prof. und einen Laptop mit Windows 10 Home.
Wieso noch Windows 7? Mach ein Update Darauf sollen auch die Batch-Proramme laufen.
Wieso auf beiden. reicht nicht einmal?Ich hoffe daß durch diese Beschreibung mein Anliegen in ein
Batch-Programm umgesetzt werden kann.
Kann es sicherlich, aber warum Batch?Batch-Programm umgesetzt werden kann.
In Batch-Prorammierung bin ich noch ein blutiger Anfänger, deshalb wäre
es schön, wenn das Programm auch erläutert würde. Denn ich will auch
verstehen warum es so programmiert wurde, denn die Beschreibung
unter Help im DOS-Promt ist nur für Fortgeschrittene zu verstehen.
Vergiss Batch und lerne gleich PowerShell. Die Befehle die du brauchst sind mehr oder weniger selbsterklärend und deine Aufgabe ist eigentlich recht simple, so dass es eine schöne Einsteigeraufgabe für PowerShell ist. Das ganze scheint für mich nicht dringend zu sein, also hast du eigentlich genug Zeit um dich mit den PowerShell-Grundlagen zu beschäftigen und dir selbst eine Lösung zu erarbeiten.es schön, wenn das Programm auch erläutert würde. Denn ich will auch
verstehen warum es so programmiert wurde, denn die Beschreibung
unter Help im DOS-Promt ist nur für Fortgeschrittene zu verstehen.
Gruß
Doskias

=> Batch
=> Powershell
Cheers over and out
certguy
@echo off &setlocal enabledelayedexpansion
:: Quellordner mit den Unterordnern
set "QUELLORDNER=D:\quelle"
:: Zielordner
set "ZIELORDNER=D:\ziel"
:: Dateifilter
set "FILEFILTER=*.mp3"
:: Zählervariable
set cnt=1
:: fur die Ordner der ersten Ebene sortiert nach Name
for /f "delims=" %%d in ('dir /b /ad /on "%QUELLORDNER%\*"') do (
:: jede mp3 Datei im Unterordner verarbeiten
for /f %%a in ("%QUELLORDNER%\%%d\%FILEFILTER%"') do (
:: zerlege den Dateinamen anhand des ersten dashes
for /f "tokens=1,* delims=-" %%b in ("%%~nxa") do (
:: Zähler mit führenden Nullen zusammensetzen
set "counter=000!cnt!" &set counter=!counter:~-4!
:: Datei mit neuem Namen ins Ziel kopieren
copy "%QUELLORDNER%\%%d\%%a" "%ZIELORDNER%\!counter! %%c"
:: Zähler um eins erhöhen
set /a cnt+=1
)
)
)
# quellordner
$quelle = 'D:\quelle'
# zielordner
$ziel = 'D:\ziel'
# jede mp3 Datei in allen Ordnern
Get-ChildItem $quelle -Recurse -Filter *.mp3 | ?{!$_.PSIsContainer} | foreach-object{$count=1}{
# Datei umbenennen und ins Ziel kopieren
Rename-Item $_.Fullname -NewName "$('{0:D4}' -f $count)$($_.Name -replace '^\d+')" -PassThru | copy-item -Destination $ziel
# Zähler erhöhen
$count++
}
certguy
jetzt lernt er aber nichts 
Powershell könnte man noch mittels [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") und New-Object System.Windows.Forms.FolderBrowserDialog graphisch so gestalten, dass der Quell- und Ziel-Ordner via Fenster auswählbar wäre, aber ich bin grad zu Faul, dass bei dir einzubauen
Powershell könnte man noch mittels [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") und New-Object System.Windows.Forms.FolderBrowserDialog graphisch so gestalten, dass der Quell- und Ziel-Ordner via Fenster auswählbar wäre, aber ich bin grad zu Faul, dass bei dir einzubauen

Wer sagt das das zwingend so ist?? Auch mit den Kommentaren in obigem Code kann man lernen wenn sich jemand Zeile für Zeile damit beschäftigt und dann die Befehle auch in der Doku nach schlägt und versteht!!
Wenn jemand tatsächlich lernen will dann tut er das auch. Jemand der das nicht tut fällt sowieso früher oder später mal auf die Fresse. Das ist nicht unser Problem.
Wenn jemand tatsächlich lernen will dann tut er das auch. Jemand der das nicht tut fällt sowieso früher oder später mal auf die Fresse. Das ist nicht unser Problem.
Zitat von @3803037559:
Wer sagt das das zwingend so ist??
Meine Erfahrung Wer sagt das das zwingend so ist??
Auch mit den Kommentaren kann man lernen wenn sich jemand Zeile für Zeile damit beschäftigt und dann die Befehle auch in der Doku nach schlägt!!
Wenn jemand tatsächlich lernen will dann tut er das auch. Jemand der das nicht tut fällt sowieso irgendwann durchs Raster.
Da hast du Recht. Da habe ich etwas vorschnell geurteilt. Meiner Erfahrung nach wird die Lösung nur leider all zu oft einfach kopiert ohne im Nachgang die Dinge zu verstehen. Ich lasse mich aber gerne eines besseren belehren. Werden wir ja an künftigen Posts sehen Wenn jemand tatsächlich lernen will dann tut er das auch. Jemand der das nicht tut fällt sowieso irgendwann durchs Raster.
Gruß
Doskias

set "QUELLORDNER=F:\Neue Lieder\42 kkkkk"
Falsch, hier gehört nur der Rootordner rein also nur F:\Neue Lieder, Unterordner werden automatisch verarbeitet.und meine Original-Files unter 42 kkkkk wurden überschrieben
Du wolltest ja das sie umbenannt werden genau das macht das Skript All I know.mp3 ohne Bindestrich stehen.
Kannst du ja leicht selbst in Zeile 17 ändern.Was macht die Zeile ren "%%a" "!counter! -%%c" ?
Die Datei umbenennen Wie wird der Dateiname zerlegt?
Was bedeuten delims, tokens, %%b , %%~nxa, %%~dpa, -%%c usw.
Was bedeuten delims, tokens, %%b , %%~nxa, %%~dpa, -%%c usw.
for /?
in die Konsole eintippen, da stehts ganz unten
Moin,
das hast du in der Ausgangssituation aber anders beschrieben:
Du willst also die Unter-Dateien nicht umbenennen. Du willst diese Dateien verschieben und Dabei umbenennen. Bitte genau aufpassen, was du dir wünscht. Es könnte in Erfüllung gehen
Gruß
Doskias
Zitat von @Grikolla:
Und was mir ganz wichtig ist, im Quell-Ordner dürfen die
.mp3-Dateien auf keinen Fall überschrieben werden.
Das sind meine Originale.
Die umgeänderten .mp3-Dateien sollen ausschließlich nur
in den Zielordner kopiert werden.
Und was mir ganz wichtig ist, im Quell-Ordner dürfen die
.mp3-Dateien auf keinen Fall überschrieben werden.
Das sind meine Originale.
Die umgeänderten .mp3-Dateien sollen ausschließlich nur
in den Zielordner kopiert werden.
das hast du in der Ausgangssituation aber anders beschrieben:
Zitat von @Grikolla:
Mein Anliegen:
Ich habe eine Anzahl von Ordern mit Unterdateien.
Die Unterdateien sind alle .mp3-Dateien.
Es sollen nun diese Unter-Dateien umbenannt werden.
Mein Anliegen:
Ich habe eine Anzahl von Ordern mit Unterdateien.
Die Unterdateien sind alle .mp3-Dateien.
Es sollen nun diese Unter-Dateien umbenannt werden.
Du willst also die Unter-Dateien nicht umbenennen. Du willst diese Dateien verschieben und Dabei umbenennen. Bitte genau aufpassen, was du dir wünscht. Es könnte in Erfüllung gehen
Gruß
Doskias

Ist doch oben schon alles im Skript angepasst ...
me => over and out
me => over and out

Tja manchmal fehlen halt schon die Basics, so what da ist dann eh Hopfen und Malz verloren. 🖖

Eueren Bemerkungen zur Folge werdet ihr keine Lust mehr haben das noch abzuändern.
Ähm, das zum Thema unsere Posts Lesen ..Nur zur Info was ich geschrieben habe ...
Ist doch oben schon alles im Skript angepasst ...
Hast du wohl auch übersehen.🤔
Hier : Ist doch oben schon alles im Skript angepasst ...
Das verstehe ich nicht, wo soll das stehen?
Na oben wo das Skript steht ... 🙆
Wie gesagt s. oben da steht es schon alles im Code so abgeändert wie du es geändert haben wolltest ... wie oft muss ich das noch wiederholen, langsam nervt's gewaltig.
So jetzt bin ich endgültig raus aus dem Thread.
Viel Spaß noch
ciao.
So jetzt bin ich endgültig raus aus dem Thread.
Viel Spaß noch
ciao.
Stimmt schon, aber gibst du dir wirklich Mühe und nimmst dir Zeit es zu verstehen. Ich denke nicht. Wieso ich das denke. In Zeile 12 steht:
1. Du benennst die Dateien erst beim Kopieren um. Dafür musst du erst den neuen Dateinamen erstellen und dann im Kopierbefehl mitgeben.
2. Du verschiebst erst deine Dateien auf den USB Stick und lässt sie dort sortieren/umbenennen.
Was davon möglich ist kann ich dir nicht sagen, da ich die Dateimenge nicht kenne.
. Mein Prinzip ist, die Leute dahin zu bewegen, dass sie das Problem selbst lösen können, auch wenn das ggf. länger dauert. Darunter leiden auch meine Azubis regelmäßig
Das ist grade bei der Programmierung von Skripten relativ einfach. Grade Powershell bietet dir unendlich viele Wege, die zum Ziel führen. Manche einfach zu programmieren, manche brauchen mehr Wissen. Du selbst schreibst, dass du Anfänger bist, also wäre es bei dir durchaus ein einfaches an deinem eigenen Beispiel Powershell zu lernen. Wo ist das Problem es selbst zu machen? Du hast das Thema am 18.09.2022 erstellt, heute ist der 22.09.2022. Es sind 4 Tage vergangen. In den 4 Tagen hättest du die entsprechenden Befehle in Powershell durchaus lernen können und das Skript selbst schreiben. Und ich lege hier vielleicht 1 Stunde am Tag zugrunde, da du Enduser und kein Admin bist. 
Dennoch resultiert durch mein Prinzip für dich jetzt folgendes Problem: Ich werde nur in Ausnahmen fertige Skripts hier posten. Ich helfe gerne, wenn jemand sein Skript hier postet und den Fehler genau beschreiben kann. Das ist, in deinem Fall, nicht so, denn du hast hier nicht dein Skript, sondern das Skript eines Anderen.
Und Punkt 2: Sofern es nicht absolut erforderlich ist, und das ist es in deinem Fall nicht, weigere ich mich "alte" Techniker zu unterstützen. Es gibt, meiner Meinung nach, heutzutage keinen Grund mehr mit Batch anzufangen. Wenn man nur Batch kann und kein Powershell, ok. Wenn ich aber jetzt etwas neues lerne, dann lerne ich doch das, was mehr Möglichkeiten hat. Powershell kann mehr und ist einfacher aufgebaut. Wie du in dem Beispiel oben siehst, braucht Powershell nicht einmal die Hälfte der Zeilen und ist mit den Befehlen darüber hinaus noch selbsterklärend. Klar, als Anfänger wirst du vielleicht sogar mehr Zeilen benötigen, weil du nicht auf die "komprimierte Lösung komsmt, aber es wird funktionieren. Du hast zum Beispiel gefragt:
Hoffe ich habe meinen Standpunkt verständlich dargelegt.
Gruß
Doskias
:: jede mp3 Datei im Unterordner verarbeiten
Dennoch gibst du die Unterordner an und fragst:set "QUELLORDNER=F:\Neue Lieder\42 kkkkk"
Stellt sich mir die Frage: Wieso verstehst du den Kommentar nicht, dass die Unterordner automatisch berücksichtigt werden?Bis auf den Punkt, daß meine Quell-Dateien immer noch umbenannt werden.
Und? Wo ist das Problem? Du hast oben doch das Skript stehen? Wenn du verstehst was in in jeder Zeile machst, was durch die Kommentare durchaus möglich sein sollte, dann ändere das Skript doch einfach um. Es gibt zwei Möglichkeiten:1. Du benennst die Dateien erst beim Kopieren um. Dafür musst du erst den neuen Dateinamen erstellen und dann im Kopierbefehl mitgeben.
2. Du verschiebst erst deine Dateien auf den USB Stick und lässt sie dort sortieren/umbenennen.
Was davon möglich ist kann ich dir nicht sagen, da ich die Dateimenge nicht kenne.
Eueren Bemerkungen zur Folge werdet ihr keine Lust mehr haben das noch abzuändern.
Es geht (zumindest bei mir) nicht um Lust. Bei mir geht es etwas ums Prinzip Dennoch resultiert durch mein Prinzip für dich jetzt folgendes Problem: Ich werde nur in Ausnahmen fertige Skripts hier posten. Ich helfe gerne, wenn jemand sein Skript hier postet und den Fehler genau beschreiben kann. Das ist, in deinem Fall, nicht so, denn du hast hier nicht dein Skript, sondern das Skript eines Anderen.
Und Punkt 2: Sofern es nicht absolut erforderlich ist, und das ist es in deinem Fall nicht, weigere ich mich "alte" Techniker zu unterstützen. Es gibt, meiner Meinung nach, heutzutage keinen Grund mehr mit Batch anzufangen. Wenn man nur Batch kann und kein Powershell, ok. Wenn ich aber jetzt etwas neues lerne, dann lerne ich doch das, was mehr Möglichkeiten hat. Powershell kann mehr und ist einfacher aufgebaut. Wie du in dem Beispiel oben siehst, braucht Powershell nicht einmal die Hälfte der Zeilen und ist mit den Befehlen darüber hinaus noch selbsterklärend. Klar, als Anfänger wirst du vielleicht sogar mehr Zeilen benötigen, weil du nicht auf die "komprimierte Lösung komsmt, aber es wird funktionieren. Du hast zum Beispiel gefragt:
Was macht die Zeile ren "%%a" "!counter! -%%c" ?
Was rename-item, copy-item oder -replace macht, braucht man nicht fragen, weil die Befehle und Operatoren selbsterklärend sind.Hoffe ich habe meinen Standpunkt verständlich dargelegt.
Gruß
Doskias