espresso
Goto Top

Per batch oder script dateien über mehrere ordner zusammenführen.

PVR hat ca. 5TB an videomaterial gespeichert.
.tpr und .001 .002 usw zusammenführen?

Hi zusammen,

folgendes Szenario

mein Festplattenrekorder hat ca. 5TB an Videomaterial gespeichert.
Die meisten Videos liegen gesplittet in Unterordnern.

Ich möchte die Files nun gejoint auf meinen PC kopieren.

Manuell würde ich nun so vorgehen:

console öffnen.
e:
cd ordner1
copy /b video1.tpr+video1.001+video1.002+video1.003 d:\videos\video_1.tpr
cd ..
cd ordner2
copy /b video2.tpr+video2.001+video2.002+video2.003+video2.004 d:\videos\video_2.tpr

usw....

lässt sich das ganze per batch realisieren, sodass ich das einfach über nacht laufen lassen kann?
bei über 200 videos tipp ich mir n wolf...

am liebsten hätte ich ein script, das mir alle verzeichnisse auf der platte durchsucht, und alle .tpr mit den dazugehörigen .001 - .00n zusammenkopiert.

kann mir evtl. jemand so ein skript aus dem ärmel schütteln`?

os ist windows 7.

danke und gruß
Kommentar vom Moderator Biber am Nov 26, 2011 um 20:43:49 Uhr
Es wäre nun speziell in der Adventszeit pietätlos, Wetten abzuschliessen.
Andernfalls würde ich drei Becher Glühwein darauf setzen, dass dieser Beitrag im Bereich "Batch & Shell" gelöst wird und nicht in "Wunderwelt Windows".
Ich verschiebe diese 5 TByte Vivavideos mal.

Content-Key: 176875

Url: https://administrator.de/contentid/176875

Printed on: April 24, 2024 at 08:04 o'clock

Member: bastla
bastla Nov 26, 2011 at 19:56:30 (UTC)
Goto Top
Hallo espresso!

Ist mit der Zielangabe "d:\videos\video_1.tpr", "d:\videos\video_2.tpr", ... eine laufende Nummerierung gemeint? Sinnvoller erschiene mir, zB nach "d:\videos\ordner1.tpr" zu kopieren ...

So oder so wäre ein etwas konkreteres Beispiel (auch für die tatsächlichen Dateinamen - Stichwort Leer- und Sonderzeichen) sinnvoll ...

Grüße
bastla
Member: espresso
espresso Nov 26, 2011 at 20:12:10 (UTC)
Goto Top
Hi bastla,

die zielnamen sind natürlich nicht als laufende Nummerierung gemeint.
Klasse wäre es, wenn das script tatsächlich die ordnernamen als zieldateinamen nehmen würde.

bsp.

e:\daten\auftritt essen 2011 tour 1\cover_bonjovi_bed_of_roses.tpr
.. .001 .002 .003 .004

-> d:\musikvideos\ [mix aus ordner und dateinamen].tpr

gruß
Member: bastla
bastla Nov 26, 2011 at 21:26:58 (UTC)
Goto Top
Hallo espresso!

Etwas zum Testen:
@echo off & setlocal
set "Quelle=E:\"  
set "Ziel=D:\Videos\"  

for /f "delims=" %%i in ('dir /s /b /a-d "%Quelle%*.tpr" 2^>nul') do call :ProcessFile "%%i"  
pause
goto :eof

:ProcessFile
pushd "%~dp1"  

set "Name=%~n1"  
set "Name=%Name:&={%"  

for /f "delims=" %%d in ("%cd%") do set "Zielname=%Ziel%%%~nxd_%~nx1"  

set "Befehl=copy /b "%Name%%~x1%""  
for /f "delims=" %%d in ('dir /b /on "%~n1.0*"') do call :ProcessName "%%d"  
echo %Befehl:{=&% "%Zielname%"  

popd
goto :eof

:ProcessName
set "Befehl=%Befehl%+"%Name%%~x1""  
goto :eof
Knifflig dabei sind die Sonderzeichen "!" und "&", welche beide in den Ordner-/Dateinamen vorkommen können (und vermutlich werden) - es wird daher temporär ein "&" durch "{" ersetzt - falls auch dieses Zeichen in den Namen enthalten sein sollte, müsstest Du nach einer Alternative suchen und in den Zeilen 13 und 19 die "{" dadurch ersetzen ...

Noch ein Hinweis: Die Pfade in den Zeilen 2 und 3 müssen jeweils mit "\" enden!

Solange übrigens in Zeile 19 "echo" steht, werden die Befehle nur angezeigt ...
Ich habe übrigens vorausgesetzt, dass es keine Videos mit einer höheren Laufnummer als ".099" gibt ...

Grüße
bastla
Member: Friemler
Friemler Nov 26, 2011 at 22:12:50 (UTC)
Goto Top
Hallo espresso,

ich hätte da noch eine Version, die ohne die Maskierung von Sonderzeichen auskommt:
@echo off & setlocal

set "SrcDir=E:\Test"  
set "DestDir=E:\Ziel"  
set "FileExt=tpr"  

for /f "delims=" %%f in ('dir /s /b /a:-d "%SrcDir%\*.%FileExt%" 2^>NUL') do (  
  call :GetParentFolder "%%~dpf"  
  call :CopyMainPart "%%f"  
  call :AppendSubParts "%%f"  
)

exit /b



:GetParentFolder
  pushd "%~1"  
  for %%p in ("%CD%") do set "ParentFolder=%%~nxp"  
  popd
exit /b


:CopyMainPart
  echo copy "%~1" "%DestDir%\%ParentFolder% - %~nx1"  
exit /b


:AppendSubParts
  for /f "delims=" %%p in ('dir /b /a:-d /o:e "%~dpn1.*" 2^>NUL ^| findstr /v /e /c:"%~nx1"') do (  
    echo copy /b "%DestDir%\%ParentFolder% - %~nx1"+"%~dp1%%p" "%DestDir%\%ParentFolder% - %~nx1"  
  )
exit /b

Die Variablen in den Zeilen 3 u. 4 müssen angepasst werden. Die Pfade dürfen NIE mit einem Bachslash enden, auch nicht bei der Angabe eines Wurzelverzeichnisses.

Das ganze sollte funktionieren, solange Verzeichnisnamen und Dateinamen kein ^-Zeichen (Zirkumflex) enthalten.

Auch in meinem Script gilt: Die Ausführung wird nur simuliert. Um den Code "scharf" zu schalten, bitte die ECHO-Befehle in den Zeilen 25 u. 31 entfernen.

N8 (Gähn)
Friemler
Member: Biber
Biber Dec 02, 2011 at 18:15:40 (UTC)
Goto Top
Moin espresso,

eigentlich hatte ich bei deinem Nicknamen andere Assoziationen, was die Beitragslaufzeit angeht...

Wie ist den der gefühlte Beantwortungsstatus deiner Frage?

Klappt es denn oder hast du das Video-Sortieren auf spätere Zeiten verschoben?

Grüße
Biber
Member: espresso
espresso Dec 02, 2011 at 19:29:02 (UTC)
Goto Top
Hi Biber,

hi alle!

Danke euch vielmals für die Hilfe und die Scripts!
Das ist hammer, was ihr euch in kürzester Zeit ausgedacht habt face-smile

Nach eins, zwei Versuchen bin ich nun endlich erfolgreich gewesen.

Klasse Arbeit!
Danke

LG
espresso
Member: blackcarghost
blackcarghost Dec 25, 2017 updated at 15:02:45 (UTC)
Goto Top
Hallo zusammen,

ich wollte keinen neuen Thread aufmachen da es sich bei meinem Problem um ein ähnliches handelt.
Auch bei mir möchte ich via Script mehrere Dateien in einem Ordner (maximal 3 Dateien) zusammenfügen.
Es handelt sich hierbei um .m2ts Dateien. Manuel per CMD funktioniert es einwandfrei jedoch sehr mühsam.
Bis jetzt bin ich wie folgt vorgegangen:
cd C:\(Ordnername)
copy /b dateiname01.m2ts + dateiname02.m2ts + dateiname03.m2ts zieldatei.m2ts

Nun wäre ein Script perfekt das die 3 Dateien im Ordner automatisch zusammenfügt und der zusammengefügten Datei den Namen des Ordners geben würde in dem sie aktuell liegen.

Meine Ordnerstruktur sieht wie folgt aus:

FESTPLATTE D:/

FILME (Hauptordner)
Urlaub1 (Ordner) - CD1.m2ts+CD2.m2ts
Urlaub2 (Ordner) -CD1.m2ts+CD2.m2ts+CD3.m2ts
Ausflug (Ordner) -CD1.m2ts+CD2.m2ts
Rudertour (Ordner) - CD1.m2ts+CD2.m2ts+CD3.m2ts

Ich hoffe ich hab es verständlich genug erklärt. Leider bin ich was Skripte betrifft ne absolute Nullnummer face-smile
Hab schon versucht das obere Skript abzuändern aber es kommen nur Fehlermeldungen.

Vielen Dank für eure Antworten.