Jump to content

Problem mit skript beim Zusammenfügen von ts Dateien


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

mir wurde vo einem netten Forummitglied folgendes Skript geschrieben um mehrere Teildateinen einer großen .ts Filmdatei zusammenzufügen.

Die Dateien wurden wegen FAT32 vom TV Revciever in mehrere Teile aufgeteilt. Alle in Ordnern in denen sich folgendes befindet (Filmname.ts; Filmname1.ts; Filmname2.ts etc.)

# Quellverzeichnis mit Ordnern
>> $Quelle = "N:\"
>>
>> # Zielverzeichnis der .ts Ausgabedatei(en)
>> $Ziel = "S:\ZielOrdner"
>>
>> # falls "\" am Ende von Ziel vergessen
>> if ( $Ziel.Substring($Ziel.Length-1) -ne "\" ) { $Ziel += "\" }
>>
>> # falls Zielverzeichnis existiert
>> if ( Test-Path -Path $Ziel -PathType Container ) {
>>
>>     # Einlesen der Verzeichnisse im Quellordner
>>     $folders = Get-ChildItem -Directory -Path $Quelle
>>
>>     # falls Ordner vorhanden
>>     if ( $folders.Count -ne 0 ) {
>>         foreach ( $ordner in $folders ) {
>>             # Kontrollausgabe
>>             $ordner.FullName
>>             # Name der Zieldatei
>>             $Stub = $Ziel + $ordner.BaseName
>>             # neue Datei
>>             $target = $Stub + ".ts"
>>             # bei Leerzeichen Anfuehrungszeichen hinzu
>>             if ( $Stub.IndexOf(" ") -ne -1 ) { $target = "`"" + $target + "`"" }
>>             # Suchmaske fuer Dateien im Ordner
>>             $files = $ordner.FullName + "\*.ts"
>>
>>             # falls weder Zieldatei noch getestete Zieldatei vorhanden sind...
>>             if ( -not ( Test-Path -Path $target ) ) {
>>                 # bei Leerzeichen Anfuehrungszeichen hinzu wg. DOS
>>                 if ( $files.IndexOf(" ") -ne -1 ) { $files = "`"" + $files + "`"" }
>>                 # Combine per DOS-copy anwerfen
>>                 Start-Process -FilePath "$env:comspec" -ArgumentList "/c","copy","/b",$files,$target -Wait
>>                 # nach jedem Verzeichnis auf Enter-Taste warten
>> #                Read-Host -Prompt "Enter..."
>>             }
>>         }
>>     } else { Write-Host "Keine Ordner in $Quelle gefunden." }
>> } else { Write-Host "Zielverzeichnis $Ziel existiert nicht!" }

 

Das ganze funktionierte letzte Woche auch ganz gut.

Als ich es heute gestartet habe wurden die Dateien in in der falschen Reihenfolge zusammengefügt.

Also erst Teil3 danarn Teil2 daran Teil1 etc.

Das macht natürlich keinen Sinn.

 

Kann mir bitte jemand weiterhelfen und erklären wo das Problem liegt.

 

Warum ging das letzte Woche und geht jetzt nicht mehr?

 

Der einzige Unterschied waren die Quelle (I:\) und das Ziel. (P:\ZielOrdner)

 

Ich bin hier echt am verzweifeln da ich riesige Mengen dieser Dateien hier habe.

 

Bitte um Hilfe.

 

Vielen Dank.

 

Beste Grüße

 

Ingo

Link zu diesem Kommentar

Tust Du uns bitte den Gefallen und bearbeitest Deine Frage nochmal? Den Code fügst Du bitte ohne die ">>" am Anfang ein und dann formatierst Du ihn mittels des Buttons </> über die Bearbeitungsleiste als Code. So können wir uns den Code kopieren, ohne ihn aufwändig bearbeiten zu müssen.

 

Danke schon mal.

 

Und noch ne kleine Sache:

 

Wenn Du die gleiche Frage zur gleichen Zeit in mehreren unterschiedlichen Foren postest, sei doch bitte so fair und füge wenigstens Links zu den jeweils anderen Foren zu Deiner Frage. Damit sich die Leute, die bereit sind, Dir zu helfen, im Zweifel nicht mehrfach oder umsonst die Mühe machen müssen. 

 

Danke schon mal im Voraus.

 

https://social.technet.microsoft.com/Forums/de-DE/ee06a217-d6b2-4f3d-b01e-6ddd33cf21ba/problem-mit-skript-beim-zusammenfgen-von-ts-dateien?forum=powershell_de

bearbeitet von BOfH_666
Link zu diesem Kommentar
# Quellverzeichnis mit Ordnern
$Quelle = "I:\"

# Zielverzeichnis der .ts Ausgabedatei(en)
$Ziel = "J:\ZielOrdner"

# falls "\" am Ende von Ziel vergessen
if ( $Ziel.Substring($Ziel.Length-1) -ne "\" ) { $Ziel += "\" }

# falls Zielverzeichnis existiert
if ( Test-Path -Path $Ziel -PathType Container ) {

    # Einlesen der Verzeichnisse im Quellordner
    $folders = Get-ChildItem -Directory -Path $Quelle

    # falls Ordner vorhanden
    if ( $folders.Count -ne 0 ) {
        foreach ( $ordner in $folders ) {
            # Kontrollausgabe
            $ordner.FullName
            # Name der Zieldatei
            $Stub = $Ziel + $ordner.BaseName
            # neue Datei
            $target = $Stub + ".ts"
            # bei Leerzeichen Anfuehrungszeichen hinzu
            if ( $Stub.IndexOf(" ") -ne -1 ) { $target = "`"" + $target + "`"" }
            # Suchmaske fuer Dateien im Ordner
            $files = $ordner.FullName + "\*.ts"

            # falls weder Zieldatei noch getestete Zieldatei vorhanden sind...
            if ( -not ( Test-Path -Path $target ) ) {
                # bei Leerzeichen Anfuehrungszeichen hinzu wg. DOS
                if ( $files.IndexOf(" ") -ne -1 ) { $files = "`"" + $files + "`"" }
                # Combine per DOS-copy anwerfen
                Start-Process -FilePath "$env:comspec" -ArgumentList "/c","copy","/b",$files,$target -Wait
                # nach jedem Verzeichnis auf Enter-Taste warten
#                Read-Host -Prompt "Enter..."
            }
        }
    } else { Write-Host "Keine Ordner in $Quelle gefunden." }
} else { Write-Host "Zielverzeichnis $Ziel existiert nicht!" }

War das jetzt so richtig? Das ist der Originalcode der schon mal funktioniert hat.

 

Deiner Anwesiung folgend hier der Hinweis und Link das ich in zwei Foren die gleiche Frage gepostet habe:

https://social.technet.microsoft.com/Forums/de-DE/ee06a217-d6b2-4f3d-b01e-6ddd33cf21ba/problem-mit-skript-beim-zusammenfgen-von-ts-dateien?forum=powershell_de

 

Link zu diesem Kommentar

Ist klar. Bringt mich aber nicht weiter.

vor 16 Stunden schrieb daabm:

Siehe Technet-Antwort - Du wirfst copy eine unsortierte Dateiliste zum Fraß vor, da ist klar, daß dann was undeterministisches dabei rauskommt... Du mußt die Liste koordiniert zusammenbauen, siehe "copy /?".

Und wie genau mache ich das?

Habe mir im Netz mal die Befehle zu copy angesehen, komm aber nicht weiter damit.

Wie wäre diese Zeile?

Bringt mich das der Lösung näher?

 

Get-Content (gci log_* | sort BaseName) > gesamt.log

Link zu diesem Kommentar

Auszug aus copy /?:

 



Um Dateien aneinander zu hängen, geben Sie eine einzelne Datei als Ziel an,
aber mehrere Dateien als Quelle (unter Verwendung von Platzhaltern oder
in der Form: Datei1 + Datei2 + Datei3).

 

Da Du sie nicht einzeln hinterander angeben willst, musst Du sie an Copy sortiert übergeben. Ob das auf- oder absteigend nach dem Name, Datum oder sonstwas ist, kannst nur du wissen.

Link zu diesem Kommentar

Du wirst hier sicher kein fertiges Script kriegen, Hilfe zur Selbsthilfe. Excel kann dir übrigens auch sehr dabei helfen. Lies dir diesen Artikel durch und lass dir eine Dateiliste mit

 


dir /b >DeineDatei.txt

 

jetzt hast Du alle Dateien aus dem Verzeichnis in einer TXT, die TXT in Excel imporiteren und mit deinem Copy Befehl verknüpfen, schon kannst Du kopieren und zusammenfügen. ;)

bearbeitet von Sunny61
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...