Probleme mit Datei-Name in Batchdatei

mischaef

Kassettenkind
Teammitglied
Registriert
Aug. 2012
Beiträge
6.469
Hallo zusammen,

ich habe ein kleines Problem mit meiner Batchdatei.

Darum geht es um folgendes:

Ich möchte mit mkvmerge meine bearbeiteten TV-Aufnahmen zusammenfügen. Dazu soll die vorhandene ts-Datei mit einer Tonspur erweitert werden und als mkv abgespeichert werden. Da die ts- und die mp3-Datei den gleichen Dateinamen besitzen soll dieser aus der ts-Datei extrahiert und auf die mp3-Datei und die zu speicherne mkv-Datei angewendet werden.

Ich habe hier ein wenig geschaut und etwas gefunden, was bei mir aber nicht so wirklich funzen will...

Code:
For %%i in (*.ts) do (
set Datei=%%~ni 
"C:\Programme\MKVtoolnix\mkvmerge.exe" -o "%Datei%.mkv"  "--default-track" "0:yes"
 "--forced-track" "0:no" "--display-dimensions" "0:1920x1080" "--compression" "0:none"
 "--language" "2:eng" "--track-name" "2:English" "--default-track" "2:no" "--forced-track" "2:no"
 "--compression" "2:none" "-a" "2" "-d" "0" "-S" "-T" "--no-global-tags" "--no-chapters" 
"(" "%Datei%.ts" ")" "--forced-track" "0:no" "--compression" "0:none" "-a" "0" "-D" "-S" "-T" "
--no-global-tags" "--no-chapters" "(" "%Datei%.mp3" ")" "--track-order" "0:0,1:0,0:2"
)

bei den ganzen Anweisungen müsst ihr nicht durchblicken, mir geht es nur darum, den Dateinamen in eine Variable zu speichern und später weiter zu verwenden...

Das Problem ist nun, dass er den Dateinamen nicht finden kann, im der Eingabeaufforderung bleibt der Name auch leer.

Jemand eine Idee was ich hier falschgemacht haben könnte?

Besten dank

Michael
 
Zuletzt bearbeitet:
Ist der Pfad zum Programm den korrekt ?


ibm9001
_______________
Daddelmaschine: i5 2500K/4 GHz/EKL Brocken & NOCTUA NF-F12 // Fatal1ty P67 Performance // 16GB Corsair Vengeance LP,DDR3-1600 // Sapphire 6950 @6970 // Samsung S22B300 // SB Audigy 2 // Samsung 470 64GB SSD
_______________
Internet-Kiste: Phenom II X6 1045 @ 3GHz @ 3.5GHz Turbo & SCYTHE Big Shuriken // ASROCK A785GMH/128M // 12 GByte Ram // Sapphire HD 6670 low Profile // Dell UltraSharp 2007FP // Samsung 470 64GB SSD
 
Der ist korrekt, der wird von der GUI des Programmes auch so erzeugt...nur habe ich die festen Dateinamen gegen die Variablen ausgetauscht...

Nachtrag:

habe es jetzt so gelöst:

Code:
For %%i in (*.ts) do (
"C:\Programme\MKVtoolnix\mkvmerge.exe" -o "%%~ni.mkv"  "--default-track" "0:yes"
 "--forced-track" "0:no" "--display-dimensions" "0:1920x1080" "--compression" "0:none"
 "--language" "2:eng" "--track-name" "2:English" "--default-track" "2:no" "--forced-track"
 "2:no" "--compression" "2:none" "-a" "2" "-d" "0" "-S" "-T" "--no-global-tags" "
--no-chapters" "(" "%%~ni.mkv" ")" "--forced-track" "0:no" "
--compression" "0:none" "-a" "0" "-D" "-S" "-T" "--no-global-tags" "
--no-chapters" "(" "%%~ni.mp3" ")" "--track-order" "0:0,1:0,0:2"
)

Es funktioniert zwar, aber ich weiß natürlich nicht ob es noch Verbesserungsmöglichkeiten gibt
 
Zuletzt bearbeitet:
Zu deinem ersten Code:
Ein Zuweisung zu einer Variable klappt, aber das ‹Expandieren› nicht. ich habe da auch geflucht bis ich eine Lösung fand. Knackpunkte sind die ! statt der %. Verleiche mal das folgende wertlose Beispiel:
Code:
set TD=M
if not exist %TD%:\FreshUp%TD%.dat goto Ente

SETLOCAL ENABLEDELAYEDEXPANSION
set SD=
set b=
for /F "delims=*" %%a in (FreshUp%TD%.dat) do (
set b=%%a
set c=!b:~0,1!
if !c!:==!b! set SD=!c!
if not !c!:==!b! Robocopy "!SD!:\!b!" "%TD%:\!b!" /mir /w:0 /r:3
)
ENDLOCAL

:Ente
Die DAT-Datie enthält entweder einen LW-Buchstaben in der Zeile oder einen Pfadnamen (mit Leerzeichen, der große Knackpunkt obendrauf). Die Variable b wird gefüllt, ohne die ENABLEDELAYEDEXPANSION aber nicht zur Laufzeit ‹expandiert› wenn sie in % satt in ! steckt.

Von der Warte aus war dein Code offenbar logisch korrekt, und Batch hat dich ausgehebelt.

Eric March
 
Zurück
Oben