Batch Datei automatisiert befüllen?

Begonnen von Trimonium, Januar 03, 2020, 11:23:56

« vorheriges - nächstes »

tsduser

Gern geschehen.

Dafuer gibt's auch diesen Code-Schnipsel, der (hoffentlich nicht nur bei mir, naja...) die Gross/Klein-Probleme beseitigen sollte (obwohl ich immer noch nicht verstehe, warum das bei Dir so auftritt):
            # Suchmaske fuer Dateien im Ordner
            $filesL = $ordner.FullName + "\*.ts"
            $filesU = $ordner.FullName + "\*.TS"

            # falls weder Zieldatei noch getestete Zieldatei vorhanden sind...
            if ( -not ( Test-Path -Path $target ) ) {
                $dateienL = Get-ChildItem -File -Path $filesL
                $dateienU = Get-ChildItem -File -Path $filesU
                $dateien = $dateienL + $dateienU | Select-Object -Unique | Sort-Object -Property Name
                if ( $dateien.Count -ne 0 ) {

Ich denke & hoffe, Du kannst mittlerweile den Schnipsel an die richtige Stelle im Skript packen.

Melde dich, falls dadurch jetzt irgendwo doppelt lange Ergebnisdateien kreiert werden (seufz)  ;)

Mam

#121
nur mal so zur Diskussion: man kann den Kram auch etwas vereinfachen:

            # Suchmaske fuer Dateien im Ordner
            $files = $ordner.FullName + "\*" # Achtung! fieser Trick, ohne "\*" gehts nicht!!!

            # falls weder Zieldatei noch getestete Zieldatei vorhanden sind...
            if ( -not ( Test-Path -Path $target ) ) {
                $dateien = Get-ChildItem -File -Path $files -Include "*.ts,*.TS" # kann man noch beliebig erweitern
                if ( $dateien.Count -ne 0 ) {

Ist funktional identisch, mal ausprobieren.

(wobei, das mit dem Klein/Großschriftproblem verstehe ich auch nicht)

LED ZEPPELIN

Hab Eure Antworten gerade erst gesehen, beim aktualisieren im Browser bin ich immer wieder auf Seite 8 gelandet. Hab das Forum nochmal neu geöffnet und siehe da.
Also Sorry für die verspätete Antwort.
Werde Eure Ergänzungen heute Abend mal versuchen und berichten.

LED ZEPPELIN

Ich habe das von MAM mal so ergänzt "*.ts,*.TS,*.TS4,*.ts4"
Passt das so?

tsduser

Sollte so klappen...
Aber in Deiner Umgebung muss man vielleicht vorsichtig mit solchen Aussagen sein, und hoffen, dass wenigstens einer der beiden Ansaetze klappt. ;D

Ein kleines Problem kannst Du vielleicht irgendwann mal antreffen, falls Du in einem einzelnen Ordner zufaellig .ts und .ts4 liegen haben solltest. Die wuerden mit Deiner Include-Anweisung dann komplett ALLE aneinandergepappt.

Mam

#125
ääh, mein Änderungsvorschlag ging eigentlich in Richtung tsduser  :-*

Es macht keinen Sinn, das 2 Leute an einem Skript basteln, er sollte es einfach mal ausprobieren und ggf. mit in kommende Versionen aufnehmen.

LED Zeppelin ist mit dieser Aufgabe doch wohl etwas überfordert  ;D

Aber ok, er hat das Prinzip verstanden und die Liste gleich erweitert, auch nicht schlecht.  ;D

Was ist TS4 ? ? ?  :o

LED ZEPPELIN

TS4 ist das Format in dem mein alter Technisat HDS2+ HD Ausstrahlungen aufgenommen hat.
TS für SD und TS4 für HD.

@tsduser

eigentlich sollten in einem Ordner keine ts und ts4 Dateien gemischt vorkommen, da jede Aufzeichnung einen eigenen Ordner haben sollte.
Aber wer weiß ob es nicht doch irgendwo eine gibt.

LED ZEPPELIN

Folgendes Skript findet nichts:
# Quellverzeichnis mit Ordnern
$Quelle = "B:\Rest"

# Zielverzeichnis der .ts Ausgabedatei(en)
$Ziel = "I:\Test"

# 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
            $target = "`"" + $target + "`""
           # Suchmaske fuer Dateien im Ordner
            $files = $ordner.FullName + "\*" # Achtung! fieser Trick, ohne "\*" gehts nicht!!!

            # falls weder Zieldatei noch getestete Zieldatei vorhanden sind...
            if ( -not ( Test-Path -Path $target ) ) {
                $dateien = Get-ChildItem -File -Path $files -Include "*.ts,*.TS,*.TS4,*.ts4" # kann man noch beliebig erweitern
                if ( $dateien.Count -ne 0 ) {
$files = " `""+$dateien[0].FullName+"`""
for ( $i = 1 ; $i -lt $dateien.Count ; $i++ ) { $files += " + `""+($dateien[$i].FullName)+"`" " }
                # 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 .ts-Dateien in " + $ordner.Fullname + " gefunden." }
            }
        }
    } else { Write-Host "Keine Ordner in $Quelle gefunden." }
} else { Write-Host "Zielverzeichnis $Ziel existiert nicht!" }

Ergebnis:
B:\Rest\1939-40, ein _Feldzug_ nach Frankreic
Keine .ts-Dateien in  + B:\Rest\1939-40, ein _Feldzug_ nach Frankreic +  gefunden.
B:\Rest\Bärenkinder
Keine .ts-Dateien in  + B:\Rest\Bärenkinder +  gefunden.

Was auch stimmt, da sich TS im einen Ordner und TS4 Dateien im Bärenkinder Ordner befinden.
Evtl. habe ich es doch falsch eingefügt?

LED ZEPPELIN

Das Skript von tsduser funktioniert.
Habe es leicht verändert und TS4 aus ts gemacht.
Beide Dateien werden gefunden.
Ich versuch jetzt mal das noch um alle nötigen Formate zu erweitern.

LED ZEPPELIN

Das sieht dann so aus und funktioniert.

# Quellverzeichnis mit Ordnern
$Quelle = "B:\Rest"

# Zielverzeichnis der .ts Ausgabedatei(en)
$Ziel = "I:\Test"

# 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
            $target = "`"" + $target + "`""
            # Suchmaske fuer Dateien im Ordner
            $filesL = $ordner.FullName + "\*.ts"
$filesN = $ordner.FullName + "\*.ts4"
$filesR = $ordner.FullName + "\*.TS4"
            $filesU = $ordner.FullName + "\*.TS"
      
            # falls weder Zieldatei noch getestete Zieldatei vorhanden sind...
            if ( -not ( Test-Path -Path $target ) ) {
                $dateienL = Get-ChildItem -File -Path $filesL
$dateienN = Get-ChildItem -File -Path $filesN
$dateienR = Get-ChildItem -File -Path $filesR
                $dateienU = Get-ChildItem -File -Path $filesU
                $dateien = $dateienL + $dateienN + $dateienR + $dateienU | Select-Object -Unique | Sort-Object -Property Name
                if ( $dateien.Count -ne 0 ) {
$files = " `""+$dateien[0].FullName+"`""
for ( $i = 1 ; $i -lt $dateien.Count ; $i++ ) { $files += " + `""+($dateien[$i].FullName)+"`" " }
                # 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 .ts-Dateien in " + $ordner.Fullname + " gefunden." }
            }
        }
    } else { Write-Host "Keine Ordner in $Quelle gefunden." }
} else { Write-Host "Zielverzeichnis $Ziel existiert nicht!" }

Mam

ich sagte ja: tsduser soll meine Änderungen ausprobieren und ggf. aufnehmen. Wobei, das Klein/Großschriftproblem sollte eigentlich überhaupt nicht existieren, sofern man nicht intensiv am Dateisystem rumgepfuscht hat...

(auch bei Windows KANN man das einschalten, tut aber niemand auf der Welt)

LED ZEPPELIN

Ich habe keine bewussten Änderungen am Dateisystem vorgenommen.
Ob das irgendein Programm von sich aus gemacht hat kann ich natürlich nicht sagen.

Mam

Zitat von: LED ZEPPELIN am Juni 18, 2020, 07:29:17
Ich habe keine bewussten Änderungen am Dateisystem vorgenommen.
Ob das irgendein Programm von sich aus gemacht hat kann ich natürlich nicht sagen.
Das habe ich auch gar nicht unterstellt  ;D
Ich sag nur: es WÜRDE gehen, wenn man die richtigen (aber sehr gut versteckten) Schalter umlegt.
Für den normalen Anwender ist diese Einstellung nicht möglich.
(Windows braucht das, damit NFS Verbindungen zu Unix Maschinen normal funktionieren können, aber das ist inzwischen schon fast in Vergessenheit geraten und in der Versenkung verschwunden)

Ich kann bei meinen Versuchen hier aber keine Auswirkung bei Klein/Grosschrift Dateien feststellen. get-childitem liefert immer beide.

LED ZEPPELIN

Habe ich auch nicht so verstanden.
Bei mir gab es das Problem ja auch nicht bei allen HDDs sondern es ist bei einer aufgetreten und danach immer vorhanden gewesen.

LED ZEPPELIN

Funktioniert doch nicht ganz perfekt.
Wenn das Skript auf einen Ordner mit nur einer ts etc. Datei stößt wird dieser übersprungen.
Es macht dann aber nicht immer mit dem nächsten Ordner weiter sondern kehrt zum letzten Ordner mit mehreren ts etc. Dateien zurück.
Auf der Ziel HDD wird die bereits existierende Datei aber nicht überschrieben.
Obwohl das cmd Fenster dies suggeriert.

Dieses Verhalten kann man aber beenden in dem man das cmd Fenster schliesst. Dann läuft es normal weiter bis es eben wieder auf einen Ordner mit nur einer Datei stößt. Das passiert oft, aber nicht immer.

Ich denke ich werde jetzt mal die HDDs auslesen und dann Ordner erstellen in die ich die geteilten Aufnahmen verschiebe und das Skript nur noch darüber laufen lassen. Das sollte das Problem lösen.
Gestern hats mit meinem Testordner in dem nur geteilte Aufnahmen mit verschiedenen Endungen waren ja auch funktioniert.


www.cypheros.de