Zwei Batch Befehle nacheinander ausführen...

  • Hey Leute, ich komme nicht weiter!
    Ich habe hier ein Script mit zwei befehlen die nacheinander eine MKV Datei abarbeiten und die Datei mit Untertiteln versehen und eine Tonspur löscht. Wie es aussieht funktioniert das Skript nicht wie es sollte, es werden immer zwei Dateien erstellt, einmal mit Untertitel und die andere ohne Tonspur, aber nie beides zusamen in einer Datei?! Es wäre schön wenn jemand der Ahnung hat ein Tipp oder eine Lösung hätte.

  • So richtig damit auskennen ... nicht unbedingt. Aber nach diesem Beispiel sind Klammern wohl nicht nötig, wenn's eh in eine Zeile passt (eher zur Gruppierung mehrerer Zeilen untereinander).

    Und nach diesem Wiki könnte es nützlich sein, das doppelte && zu verwenden, damit nur gelöscht wird, wenn das vorherige mkvmerge nicht fehlerhaft arbeitet. (Ich nehme an, du würdest dafür auch die Variable %mkvmerge% verwenden, statt nochmal den vollen Pfad zu schreiben.)

  • Danke für deine schnelle Antwort, aber ich glaube wir reden aneinander vorbei :D
    Das Script funktioniert ja, aber nicht so wie ich es möchte...
    Sagen wir mal so, ich habe eine Videodatei im Mkv-Format
    und eine Untertiteldatei im .srt Format die ich integrieren will,
    dafür ist der Code verantwortlich:

    Code
    for %%A IN (*.mkv) do (      if exist "%%~nA.srt" ("C:\Programme\MKVToolNix\mkvmerge.exe" -o "remux-%%~nxA" "%%~A" "%%~nA.srt" & del "%%~nA.mkv" "%%~nA.srt")      echo     )

    Und der Abschnitt im Script, entfernt die zweite Tonspur in der Videodatei (in mein Fall eine englische Tonspur).

    Einzeln voneinander funktionieren die Batch Befehle wunderbar, aber es sind dann
    immer zwei Arbeitsschritte um eine MKV-Datei zu bearbeiten und bei einer Serie
    mit mehreren Folgen ist das zeitaufwändiger. Ich möchte das die Befehle zusammen
    im Script ablaufen, so dass das Endprodukt eine MKV-Datei ist mit Untertiten und
    ohne die englische Tonspur.


  • (Das automatische Löschen hab ich erst mal weggelassen. Kannst ja testen, ob es klappt und noch entsprechend einfügen.)

    Falls es nicht funktioniert: Ausgabe kopieren und hier einfügen.

  • Er spuckt jedes mal eine ca 100 kb's Große Mkv-Datei aus, scheint wohl eher die Untertitel-Datei zu sein mit der Endung .mkv

    Edit:

    So gehts, danke sneaker2 :rock:

    Code
    SET mkvmerge="C:\Programme\MKVToolNix\mkvmerge.exe"
    
    PUSHD %~dp1
    if [%1]==[] goto :eof
    :loop
    if exist "%~n1.mkv" ( %mkvmerge% -o "Neu\%~n1.mkv" -a !2 %1 "%~n2.srt" & del "%~n1.mkv" "%~n2.srt" )
    shift
    if not [%1]==[] goto loop

    Einmal editiert, zuletzt von Neugier (28. August 2017 um 20:44)

  • Ah stimmt, hatte vorher beide Dateien raufgezogen :rolleyes_:

    Gibt es auch eine möglichkeit Untertitel im .idx/.sub Format mit ins Script einzubauen?
    Bekomme das irgendwie nicht hin...

  • Hey Leute,
    mit dem Script bin ich bisher sehr zufrieden, es hat mir eine Menge Arbeit abgenommen. Trotz allem positiven, ist mir aufgefallen, wenn ich eine MKV-Datei in einem Ordner habe und diesen Ordner per Drag&Drop raufziehe schließt sich das Fenster sofort und die MKV-Datei wird nicht bearbeitet. Wenn man die MKV-Datei direkt raufzieht ohne Ordner funktioniert das Script anstandslos... Leider ist das ein bisschen umständlich, besonders wenn man mehrere Filme in Ordnern hat. Wäre schön wenn jemand einen Tipp oder eine Lösung hätte.

    2 Mal editiert, zuletzt von Neugier (12. September 2017 um 19:07)

  • ich glaub da musst du ne prüfroutiene für "%~1" einbauen.

    wenn du nicht in "%~1" wechseln kannst, dann ist es eine datei und du musst nach "%~dp1" wechseln,
    sonnsten mit "%~1"
    if () else ()

    und dann mit "%~nx1" die dateien weiter verarbeiten,
    bzw. mit einer forschleife erstmal die ganzen dateien ermitteln...

    viel spaß...

    edit:
    hier mein altes verzeichnis-prüf-script:

    Code
    @echo offcd /d "%~dp1" 2>nulcd /d %1 2>nulset x1="%~1"set x2="%cd%"set x3="%~dp1"set xif     "%~1"=="" 	goto :errif     "%~1"=="%CD%" 	goto :dirif not "%~1"=="%CD%" 	goto :filegoto :err:direcho.is dirgoto :end0:fileecho is filegoto :end0:errecho.errgoto :end0:end0pause

    das ist 7 jahre alt, das kann man sicherlich noch optimieren... ^^

    und die forschleife (10 jahre alt):

    Code
    set DropName=%~n1
    echo (0) droppd File:
    echo '%DropName%'
    echo.
    
    
    
    
    :Video
    for /F "delims=" %%a in ('dir "%DropName:~0,-10%*.ogm" /B /A-D /os') DO set VideoName=%%a
  • Mein Skript müßte man dafür stark überarbeiten. Es durchsucht halt keine Ordner, sondern nimmt eine Liste an Dateien. Habe im Moment keine Zeit/Lust, das Teil komplett umzubauen. Sollte aber im Prinzip nicht soo schwer sein. Müßte man eine for-Schleife drumherumsetzen.

    Neugier
    Dir ist das mit der Liste klar? Also, daß man mehrere .mkv-Dateien markieren und per Drag&Drop draufschieben kann und die der Reihe nach abgearbeitet werden?


  • Dir ist das mit der Liste klar? Also, daß man mehrere .mkv-Dateien markieren und per Drag&Drop draufschieben kann und die der Reihe nach abgearbeitet werden?

    Ja, das ist mir klar... Leider sind meine Filme einzeln in Ordnern!
    Was das draufschieben erschwert, da ich jeden Ordner einzeln öffnen muss um an die MKV-Datei zu kommen.


    ich glaub da musst du ne prüfroutiene für "%~1" einbauen.
    wenn du nicht in "%~1" wechseln kannst, dann ist es eine datei und du musst nach "%~dp1" wechseln,
    sonnsten mit "%~1"
    if () else ()

    und dann mit "%~nx1" die dateien weiter verarbeiten,
    bzw. mit einer forschleife erstmal die ganzen dateien ermitteln...

    viel spaß...

    Danke für dein Scrip! Ich hatte auch viel spaß damit...
    Bis ich gemerkt habe, dass ich überhaupt nicht durchblicke.
    Egal was ich zusammen gebaut habe, es war ohne Sinn und Versand...
    Langsam merke ich mein Alter, neugier ist vorhanden,
    bloß das Wissen und Verständnis nicht.

    Aber eins weiß ich, dass ich das Script nicht alleine
    bewerkstelligt bekomme... Wäre dankbar wenn sich jemand
    erbarmt und mir helfen könnte das Script fertig zu stellen.

  • Ich habe das Script gefunden...

    Was auch scheinbar mit Ordnern geht. Es lassen sich aber irgendwie keine Befehle hinzufügen ohne dass es abschmiert.

    HQ-LQ
    danke für deine Codes, leider komme ich damit nicht klar... Bin ein Newbie in diesem Gebiet :(


    Dir ist das mit der Liste klar? Also, daß man mehrere .mkv-Dateien markieren und per Drag&Drop draufschieben kann und die der Reihe nach abgearbeitet werden?

    Ja, das ist mir klar... Leider sind meine Filme einzeln in Ordnern,
    was das draufschieben erschwert. Da ich jeden Ordner einzeln öffnen muss um an die MKV-Datei zu kommen.

    2 Mal editiert, zuletzt von Neugier (21. September 2017 um 20:29)

  • eigendlich müsstest du nach %mkvmerge% (Z:10) die optionsschalter setzen können.

    du könntest das script aber auch so modifizieren,
    indem du eine %variable% einbaust.
    so brauchst du diese nur noch diese manipulieren
    und brauchst dich nicht mehr durch den code hangeln.

    der schalter -v hab ich nur als beispiel reingesetzt,
    verbose: detaliertere ausgabe

    Code
    @echo offsetlocal enableDelayedExpansionset mkvmerge="C:\Programme\MKVToolNix\mkvmerge.exe"[COLOR='#B22222']set "commands=-v"[/COLOR]for /d %%D in (*) do (    pushd %%D    set files=    for %%F in (*.mkv) do set files=!files! + ^( "%%F" ^)    if not "!files!"=="" %mkvmerge% [COLOR='#B22222']%commands%[/COLOR] -o "output.mkv" !files:~2!    popd)pause

    wie du siehst "klammer=ich" die variablen anders,
    so werden leerzeichen, besonders in einem pfad-namen besser verarbeitet.
    dateinamen variablen müssen aber daduch immer mit "" eingeklammert werden: "%Dateiname%"


    im script gibt es "setlocal enableDelayedExpansion"
    ich habe es nie 100%-ig verstanden.
    erst wenn ich gegen eine wand gelaufen bin habe ich es aktiviert,
    sonnst habe ich es zuerst immer ohne gescriptet.

    bzw., hab was drumrum gebastelt... XD

    hier darfst du es aber nicht entfernen,
    da die !variablen! anders verarbeitet werden.

    -

    ich persönlich, 98% der läute sind da anderer meinung,
    finde absätze in einem befehl ungünstig.
    da überseh ich gern zusammenhang.
    ich bin ein one-liner und "(klammer)" dafür lieber etwas mehr...

    -

    wow,
    setlocal enableDelayedExpansion wird warscheinlich nur gesetzt,
    um pushd besser verwenden zu können.
    da ich gern pfade in mehreren %variablen% speichere,
    so brauchte ich den spaß nie, so muss man auch nicht die !variable! anders aufrufen.
    (was probleme mit dateinemen verursachen kann, welche ein !-zeichen haben.)

    ich habe mal die variablen anders eingeklammert,
    kannst ja mal sagen ob das was gebracht hat.

    wie sieht denn ein verzeichnispfad + dateiname bei dir aus?
    es gibt immerwieder wechselwirkungen mit:
    - leerzeichen
    - sonderzeichen
    - sonderzeichen die das script selbst verwendet
    - äöüß kennt der ansi-zeichensatz nicht...
    - unicode

  • HQ-LQ danke für deine Hilfe! Geht anscheinend...
    Mal schauen ob ich das Script von sneaker2 komplett
    integriert bekomme. Andernfalls melde ich mich nochmal.

    Code
    @echo offsetlocal enableDelayedExpansionset mkvmerge="C:\Programme\MKVToolNix\mkvmerge.exe"set "commands=-a !2"for /d %%D in (*) do (    pushd %%D    set files=    for %%F in (*.mkv) do set files=!files! + ^( "%%F" ^)    if not "!files!"=="" %mkvmerge% %commands% -o "output.mkv" !files:~2!    popd)pause

    Edit: Der neue Code von Dir funktioniert nicht...

    Sieht in etwa so aus.

    dfffd.png

    Edit: Die Optionsschalter funktionieren leider auch nicht so wirklich, er löscht zwar mit dem Befehl set "commands=-a !2 eine Tonspur, aber nicht die er soll.

    3 Mal editiert, zuletzt von Neugier (21. September 2017 um 21:39)

  • So habe es hinbekommen...
    Ich denke es ist nicht die sauberste Lösung, aber es funktioniert.
    Es werden alle Mediadateien im MKV-Format verarbeitet die im Ordner
    auf dem Destop liegen. Unterordner ausgeschlossen, außer man ergänzt
    den Code durch folgenden: for /d /r %%D in (*) do (

    2 Mal editiert, zuletzt von Neugier (22. September 2017 um 10:18)


  • ggf. könnte man den errorlevel ausweten,
    oder eine eigene prüftoutine einbauen...

    Ja, das wäre mit sicherheit die elegantere Lösung...

    Wie es aussieht, funktioniert die Namen übergabe mit dem
    Code "neu/%~n1.mkv" auch nicht so richtig. Er übernimmt
    jedes mal den Namen von einem Ordner und haut ihn auf
    alle MKV-Dateien die verrabeit werden...

    3 Mal editiert, zuletzt von Neugier (22. September 2017 um 10:23)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!