Batch Ordnernamen als Dateinamen übernehmen

waxweazle2001

Cadet 2nd Year
Registriert
Nov. 2014
Beiträge
21
Hallo Leute,

ich habe mir eine Batch geschrieben um mehrere mp3-Dateien zu einer zusammen zu kopieren, jetzt wäre es schön wenn ich den Ordnernamen als Dateinamen für die Zusammengeführte Datei übernehmen könnte.
Ich habe zwar schon gegoogelt und mehrere Lösungsansätze probiert aber irgendwie hat es mit keiner der Vorschläge funktioniert, es blieb immer bei der "gesamt.mp3" die dann stehen geblieben ist.
Hier einmal der Grundquellcode:

@Echo off
CHCP 1252
:Ja
set /p Auswahl=Bitte waehlen sie den Pfad mit den zusammenzufuegenden Dateien:
copy /b "%Auswahl%\*.mp3" "%Auswahl%\gesamt.mp3
set /p wahl=Wollen Sie eine weitere Datei zusammenfuehren? (j/n)
if '%wahl%' == 'n' goto Nein
if '%wahl%' == 'j' goto Ja
Goto Ende
:Nein
goto Ende
:Ende
Pause

Vielleicht könnt ihr mir hier helfen, das wäre super damit ich dann nicht immer im Nachgang noch die Datei manuell umbenennen muss.
 
%Auswahl% scheint ja den Ordnernamen zu enthalten?
Also wirst du das da raus holen können, analog zu dem hier: https://stackoverflow.com/questions/15567809/batch-extract-path-and-filename-from-a-variable

Und naja, das Kopieren von MP3-Dateien zu einer großen Datei ist in meinen Augen ziemlicher Unsinn, aber was soll's. Ich würde da eher mit z.B. ffmpeg arbeiten, aber gibt ja genug im Internet, die diese beschissene copy-Methode empfehlen.

P.S. Statt dem "set /p wahl=..." würde ich überlegen choice zu verwenden, das ist genau dafür gedacht.
 
  • Gefällt mir
Reaktionen: Sulik
tollertyp schrieb:
%Auswahl% scheint ja den Ordnernamen zu enthalten?
Also wirst du das da raus holen können, analog zu dem hier: https://stackoverflow.com/questions/15567809/batch-extract-path-and-filename-from-a-variable

Und naja, das Kopieren von MP3-Dateien zu einer großen Datei ist in meinen Augen ziemlicher Unsinn, aber was soll's. Ich würde da eher mit z.B. ffmpeg arbeiten, aber gibt ja genug im Internet, die diese beschissene copy-Methode empfehlen.

P.S. Statt dem "set /p wahl=..." würde ich überlegen choice zu verwenden, das ist genau dafür gedacht.

Auswahl enthält den kompletten Pfad zu der Datei inkl. des Ordnernamens.
Irgendwie steige ich durch den Link den du mir geschickt hast nicht wirklich durch, bin auch nicht wirklich ein Programmierer. Ich suche mir die meisten Sachen aus dem Netz zusammen bis es funktioniert.

Das zusammen kopieren von Dateien nutze ich als schnelle Geschichte um zum Beispiel Hörspiele in eine Datei zu kopieren ohne sie neu Umwandeln zu müssen und somit Qualitätsverlust zu haben. ;-)

Wie gesagt, für mich funktioniert das mit "set /p wahl=..." bei Choice müsste ich mich dann jetzt auch erstmal wieder schlau machen wie das zu verwenden ist und evtl. basteln bis es läuft wie es soll.
 
Sorry, schau dir einfach mal das an:

Code:
@ECHO OFF
SETLOCAL
set file=C:\Users\l72rugschiri\Desktop\fs.cfg
FOR %%i IN ("%file%") DO (
ECHO filedrive=%%~di
ECHO filepath=%%~pi
ECHO filename=%%~ni
ECHO fileextension=%%~xi
)
Ja, du musst jetzt halt kreativ sein und es schaffen zu verstehen, dass du halt %AUSWAHL% statt %file% nimmst. Und dann kannst du ja mal schauen, ob da irgendwas nützliches rauskommt.
 
tollertyp schrieb:
Sorry, schau dir einfach mal das an:

Code:
@ECHO OFF
SETLOCAL
set file=C:\Users\l72rugschiri\Desktop\fs.cfg
FOR %%i IN ("%file%") DO (
ECHO filedrive=%%~di
ECHO filepath=%%~pi
ECHO filename=%%~ni
ECHO fileextension=%%~xi
)
Ja, du musst jetzt halt kreativ sein und es schaffen zu verstehen, dass du halt %AUSWAHL% statt %file% nimmst. Und dann kannst du ja mal schauen, ob da irgendwas nützliches rauskommt.
Also ich hab das jetzt mal eingebaut, soweit so gut.
Als erstes bekomme ich die Rückmeldung das die Umgebungsvariable "Pfad" nicht definiert ist.
Dann Schlüsselt er mir den Pfad aber doch auf den er in %Auswahl% drin hat.
So weit so gut.
im Parameter filename hat er dann die Infos die ich brauche. Die frage ist nur wie ich die jetzt verwenden kann.
Ich habe es Versucht mit

ren "%Auswahl%\gesamt.mp3" "%Auswahl%\%filename%.mp3"

Aber da filename ja keine Variable ist gibt er natürlich einen Syntaxfehler aus.
Am schönsten wäre es ja wenn er direkt nach dem Zusammenkopieren direkt die Datei mit dem Filename versorgt und nicht hinterher die erstellte "gesamt.mp3" nochmal umbennen muss.
Aber das ist übersteigt langsam meinen Horizont, wie ich jetzt den Wert in Filename in die Benennung der Datei gleich nach dem Kopieren schaffe, und vor allem wie dann der Ablauf sein muss was ich wann zuerst auslesen oder mitgeben muss damit das auch alles funktioniert.
 
fgordon schrieb:
Nutz doch ein PowerShell Script das ist doch das "neue" Batch? (ich nutze eher bash Scripte aber PowerShell ist glaub nicht so schlecht)

z.B.
https://stackoverflow.com/questions/9788492/powershell-extract-file-name-and-extension

Ist PowerShell nicht immer ab Win 10 dabei - oder zumindest kostenlos installierbar?
Ja das mag ja alles sein, aber von PowerShell hab ich noch weniger Ahnung und soweit ich weiß kann man Powershell Skripte nicht direkt ausführen, daher bleibe ich lieber bei Batch. ;-)
 
waxweazle2001 schrieb:
und soweit ich weiß kann man Powershell Skripte nicht direkt ausführen, daher bleibe ich lieber bei Batch. ;-)
Da liegst du falsch, die kann man genauso ausführen wie die Batch.
 
Aber dazu muss man ja die PowerShell erst aufrufen oder sich ein Hilfsskript schreiben der dann die PowerShell ausführt. Das ist mir alles zu kompliziert. Ich bin eben kein Programmierer und hab mit PowerShell null Erfahrung und da es ja auch mit Batch funktionieren sollte wäre es schön das per Batch zu lösen. ;-)
Ich hab grade eine PowerShell Schulung auf der Firma und verstehe nur Bahnhof.
 
waxweazle2001 schrieb:
Ich hab grade eine PowerShell Schulung auf der Firma und verstehe nur Bahnhof.
😂
So ging es mir am Anfang auch. Es ist aber kein Hexenwerk und auch keine Raketenwissenschaft und deshalb relativ leicht lernbar.
Wer Erfahrung mit Batch hat, sollte sich mit PS nicht allzu schwer tun. Alles eine Sache des Willens.;)
 
Naja ich hab aber nur rudimentär Erfahrung mit Batch, ist auch mehr um Skripte zu verstehen. Aber ich stand mit Programmierung schon immer auf Kriegsfuß, das hat mit TurboPascal und C++ schon nicht so wirklich geklappt. Und genau deswegen bin ich ja hier, nicht um eine Schulung in Batch zu machen sondern um eine Lösung von den Wissenden zu meinem Problem zu finden. ;-)
 
Leute, kommt endlich weg von batch, powershell ist seit mindestens 10 Jahren die bessere und modernere Alternative.

Selbst MS hat seine User schon zum Umstieg angefleht

https://www.siblingrecruitment.com/blog/view/143/Stop-Using-Cmd-Begs-Microsoft

"
No. Cmd's LITERAL reason to exist was to run MS-DOS scripts and commands to aid people coming to NT from DOS/Win9x.

"

und das war in 2020

um es kurz zu machen:

batch ist Mist, Powershell ist Weltklasse
 
pizza4ever schrieb:
Leute, kommt endlich weg von batch, powershell ist seit mindestens 10 Jahren die bessere und modernere Alternative.

Selbst MS hat seine User schon zum Umstieg angefleht

https://www.siblingrecruitment.com/blog/view/143/Stop-Using-Cmd-Begs-Microsoft

"
No. Cmd's LITERAL reason to exist was to run MS-DOS scripts and commands to aid people coming to NT from DOS/Win9x.

"

und das war in 2020

um es kurz zu machen:

batch ist Mist, Powershell ist Weltklasse

Das mag alles sein wenn man sich damit auskennt, ich habe wie gesagt grade ne PowerShell Schulung und verstehe nur Bahnhof. Ich bin kein Programmierer und hab auch nicht wirklich Interesse daran mich komplett in eine neue Programmiersprache einzuarbeiten. Ich bekomme das einfach nicht mehr in meinen Kopf.
Batch ist für mich noch einigermaßen logisch weil ich vorher auch Turbo Pascal hatte und dieses zumindest alles ein bisschen lesen kann. PowerShell wie auch andere Programmiersprachen oder auch nur html sind für mich alles Bömische Dörfer.
Daher bleibt es bei mir Batch, wenn er irgendwann nicht mehr geht muss ich sehen ob ich dann überhaupt noch Skripte schreiben kann. Wie gesagt ich war nie und werde nie ein Programmierer sein.
Es sollte hier auch keine Discussion werden was besser ist sondern einfach eine Lösung hergeleitet werden.
Inzwischen hat mein Vater mir aber bei dem Skript geholfen, der ist da wesentlich fitter als ich weil er auch Datenbankadmin war und dort viel mit Skripten zu tun hat.
Ich habe das allerdings nicht und muss auf der Arbeit weder Skripte schreiben noch verstehen was passiert, aber wollte zumindest ne Grundlage haben so das ich annähernd weiß was passiert.
Daher danke an die, die sich auch bemüht haben mir zu helfen.
Alle anderen können sich ihren Hinweis sparen, ich weiß das PowerShell das neue Batch ist, wenn ich es aber nicht anwenden und verstehen kann dann nützt es mir auch nichts!!!
 
Dann erklär mir doch bitte mal die drei Befehle:

@Echo off
CHCP 1252
:Ja

Batch ist Mist, war immer Mist und wird immer Mist bleiben. Wer daran festhält ist selbst dran Schuld.

Bahnhof versteht man vll am Anfang wenn man Dinge wie CMDlets und Pipe Konstruktionen nicht versteht, was in der Tat zu Beginn un-intuitiv ist aber aus der Unix? Welt kommt und immer gefordert wird und wenn man sich erstmal damit beschäftigt hat sehr kurze Skripte ermöglicht.

Warum du eine Schulung machst wenn du doch offensichtlich dich damit nicht auskennst und es nicht willst und zu gleich in einem Programmierforum um Unterstützung fragst ist mir aber auch nicht so ganz klar. Was machst du überhaupt beruflich?
 
Ich arbeite im IT-Support,
Ich muss aber nie selbst Skripte dafür schreiben und muss sie wenn nur lesen können. Mir ging es in der Tat darum Skripte die uns in PowerShell bereitgestellt werden evtl. besser lesen zu können, aber nie darum selbst welche zu schreiben.
Ich habe damals in der Schule Turbo Pascal in der Ausbildung C++ gelernt und da ist zumindest bei Turbo Pascal finde ich Batch nicht so weit weg und einfach leichter zu lesen.
Sonst benutze ich wie hier auch Skripte nur rudimentär und für mich selbst für kleine Probleme. Und auch hier bediene ich mich oft dem Internet um mir dort von Seiten die bereits eine Lösung haben diese zu übernehmen und für meine Bedürfnisse anzupassen.
Wie gesagt sind das aber keine super tollen Sachen sondern so wie hier nur ein Mini Tool.
Und ich frage in einem Programmierforum um Unterstützung um eine Lösung zu meinem Problem zu erhalten, denn dazu denke ich sind Foren da und nicht um dann ein Buch angeboten zu bekommen wo es heißt, lies doch mal das Buch dann wirst du schon irgendwo ne Lösung finden. Das ist ja quasi das was mir hier von dir mit PowerShell angeboten bekommen habe.
Ich müsste erstmal um das alles in PowerShell umsetzen zu können die "Vokabeln" lernen, das nimmt mein Hirn aber nicht mehr auf, ist halt wie ne Sprache lernen, ohne Vokabeln und Grundlagen in der Grammatik keine Sprache. Und wie gesagt das schaffe ich nicht mehr und habe auch gar kein Interesse daran was neues zu lernen wenn ich eine Sprache mehr oder weniger in Grundzügen kann und damit auch mein Problem lösen kann ohne das ich was neues erlernen muss.
Evtl. hätte es mir hier auch weitergeholfen wenn ich zu der Lösung den Pfad auszulesen auch noch den Tipp bekommen hätte es in eine Variable zu schreiben und diese dann zu übernehmen. Dann hätte ich weiter recherchieren können wie man dieses am besten bewerkstelligt.
Wie gesagt brauche ich in meiner Täglichen Arbeit nie Programmieren und nutze sie hauptsächlich Privat für Kleinigkeiten.
 
Ich werde darauf inhaltlich nicht eingehen, aber im Endeffekt hast Du ein gutes Beispiel dafür genannt, warum Powershell Batch überlegen ist

Der von dir gesuchte Sachverhalt "bekomme den Ordnernamen aus einem Pfad raus" ist in Powershell in einer Zeile erledigt, dafür gibt es fertige CMDlets. Namentlich sogar sehr intuitiv "Split-Path" genannt, und das ganze ist vorbildlich dokumentiert auf der MS HP Zu finden:

https://docs.microsoft.com/en-us/po...ell.management/split-path?view=powershell-7.2

1651307305150.png
 
  • Gefällt mir
Reaktionen: NotNerdNotDau und DubZ
Mit dem copy Befehl kannst Du verschiedenes tun, in ein Verzeichnis kopieren, eine Datei überschreiben und auch aneinanderhängen (mit Datei1 + Datei2). So wie du copy benutzt und wenn "%Auswahl%\gesamt.mp3" eine Datei ist, wird diese immer wieder überschrieben und nix angehängt.

Ich bezweifle, das man die hinteren Teile der aneinander geklatschten MP3s hören kann, da das nicht dem MP3 Format entsprechen dürfte. Ausprobiert habe ich es aber nicht.
 
Hallo kleiner Muck,
das hat bisher alles so funktioniert, es ging einzig darum den Namen der Datei anzupassen. Wie ich auch schon geschrieben habe hat sich das Thema auch erledigt, da mein Vater mir hier helfen konnte, das einzige woran mein Vater noch arbeitet ist, das evtl. mit php umzusetzen weil der ID-Tag sonst nicht bearbeitet werden kann.
Das ist aber alles kleinkram.
 
Zurück
Oben