Batch Datei automatisiert befüllen?

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

« vorheriges - nächstes »

Trimonium

Hi,

ich wollte mal fragen ob nicht die Möglichkeit besteht die Batchdatei automatisch zu befüllen.
Wenn ich z. B. einen Ordner mit 30 Aufnahmen auf der Festplatte habe, muss ich aktuell jede einzelnen davon öffnen und sie der Batch Datei hinzufügen. Da ich am Ende eh immer als Standard nur eine Tonspur und keinen Teletext oder Untertitel in der erstellten Datei speichere, wäre das dann eine enorme Zeitersparnis.

Zur Not müsste ich mir mal eine erstellte Batch Datei anschauen, vielleicht könnte ich mir da was basteln  :)

Danke und Grüße

Tri
Panasonic Plasma TH-42PZ85e, Topfield SRP-2100 Twin HD Sat, Topfield PVR 5000 SD Sat, Alphacrypt CI, sky Komplett, Panasonic DMP-BD 80EG Blu-Ray Player, Yamaha DVD S-1800 (Titan), Tvix HD M-7000A, Pioneer VSX-915-S Audio Receiver, PS3, Xbox 360 Slim, PS3, Wii

Cypheros

Vielleicht hilft das?

TSDoctor.exe [Input Filename] [Command] [Option] [Output Filename]

Command: AUTOFIX (startet automatisch die Reparatur der Datei)
Command: AUTOCHECK (startet automatisch die Überprüfung der Datei)
Command: AUTOBATCH (startet automatisch die Batchverarbeitung der internen Batchliste)
Command: AUTODEMUX (startet automatisch das Demuxen der Datei)
Option: CROP=X (Beschneidet den Anfang der Datei um X MBytes beim Öffnen)
Option: LOG (Schreibt ein Log)

Beispiel:
"TSDoctor.exe" "D:\Aufnahme\*.ts" Autofix "D:\Archiv\"

Trimonium

Super, vielen Dank.

Ich schaue mir das mal genauer an und kann mir damit vielleicht was für eine automatisierte Lösung basteln.

Grüße

Tri
Panasonic Plasma TH-42PZ85e, Topfield SRP-2100 Twin HD Sat, Topfield PVR 5000 SD Sat, Alphacrypt CI, sky Komplett, Panasonic DMP-BD 80EG Blu-Ray Player, Yamaha DVD S-1800 (Titan), Tvix HD M-7000A, Pioneer VSX-915-S Audio Receiver, PS3, Xbox 360 Slim, PS3, Wii

Trimonium

Zitat von: Cypheros am Januar 03, 2020, 12:45:25

Beispiel:
"TSDoctor.exe" "D:\Aufnahme\*.ts" Autofix "D:\Archiv\"

Das funktioniert so schon absolut perfekt für mich. Einfach alle Aufnahmedateien in den Startordner und alle gefixten Dateien in den Zielordner. Muss nur noch sehen ob ich das mit dem Zusatz "_Fixed" an der Zieldatei noch hinbekomme, ansonsten nehme ich da einfach das Bulk Rename Utility im Anschluss.

Bei mir hat sich in der letzten Zeit viel angesammelt und ich habe aktuell knapp 400 Dateien auf der Platte liegen, welche ich so mit viel weniger Stress durch den TS Doctor bekomme.  :)

Vielen Dank nochmals für deine Unterstützung.

Tri
Panasonic Plasma TH-42PZ85e, Topfield SRP-2100 Twin HD Sat, Topfield PVR 5000 SD Sat, Alphacrypt CI, sky Komplett, Panasonic DMP-BD 80EG Blu-Ray Player, Yamaha DVD S-1800 (Titan), Tvix HD M-7000A, Pioneer VSX-915-S Audio Receiver, PS3, Xbox 360 Slim, PS3, Wii

shaka

#4
Hallo,

ich benutze dieses Script in einer BAT Datei:

Zitat
cd /D %~dp0
@FOR %%i IN (*.ts) do @(
           "C:\Program Files (x86)\Cypheros\TSDoctor3\tsdoctor.exe" "%%i" autocheck /log
)

Möglich dass es sogar aus diesem Forum stammt. Ist allerdings auf TSDoctor3 angepasst.

Alle Dateien mit der Endung .ts werden nach und nach geprüft, welche sich im selben Ordner befinden.

Ist mir eine RIESEN Hilfe.

Man kann auch diese Bat Datei in mehrere Ordner kopieren und mehrere Instanzen gleichzeitig laufen lassen, wenn euer System flott genug ist.

Gruß,

Shaka

Mam

Also, wir haben nun 2020, da sollten Batchdateien langsam aber sicher in die Tonne wandern. >:(

Hier mal dasselbe (etwas aufgehübscht) in Powershell


####################################################################
# Fingerübung, die alle TS Dateien in einem Verzeichnis (rekursiv!)
# einmal durch den TSDoc jagt und überprüfen lässt
# 05.01.2020 MAM
####################################################################

### Aufruf:
### powershell Skriptname [[-Pfad] Verzeichnis]
### (ohne Angabe wird das Verzeichnis durchsucht, wo das Script
### gespeichert ist)

param (
    [string]$Pfad=""
  )

### Wo versteckt sich der Doctor?

$TSDoc="${env:ProgramFiles(x86)}\Cypheros\TSDoctor3\TSdoctor.exe"

# wurde beim Start kein Verzeichnis angegeben?
if ($Pfad)
{
}
else
{
     # ok, dann nehmen wir eben unser eigenes
     $Pfad=$(Split-Path -Path $MyInvocation.MyCommand.Path)
     #
     # Alternativ kann man hier auch
     # $Pfad="."
     # reinmachen, um das aktuelle Verzeichnis zu wählen
     #
}

# Alle TS Dateien im Suchpfad ermitteln
Write-Host "Durchsuche $Pfad nach TS Dateien"

$Alle=Get-ChildItem $Pfad -Filter "*.ts" -recurse -Name

#
# und nun jede davon durch den Doc jagen mit den entsprechenden Parametern
# als kleine Kür messen wir noch die jeweilige Laufzeit und geben sie
# hinterher aus (auf Nanosekunden genau! :-) )
#
$Beginn=Get-Date
foreach ($i in $Alle){
    $Param=$i,"autocheck","/log"
    $StartZeit=Get-Date
    Write-Host $StartZeit.ToLongTimeString() "bearbeite" $Param
    & $TSDoc $Param | Out-Null
    $EndZeit=Get-Date
    Write-Host "Bearbeitungsdauer " ($Endzeit-$Startzeit) "Sekunden"
}
$Ende=Get-Date
Write-Host "--------------------------------------------------"
Write-Host "Gesamtdauer " ($Ende-$Beginn) "Sekunden"


Irgendwohin abspeichern als TSBatch.PS1 und dann aufrufen mit:

"powershell <Pfad>\TSBatch.PS1 [ [-Pfad] Verzeichnis]"

(sieht viel komplizierter aus, als es ist. Wenn man kein "-Pfad" angibt, wird, wie in der Batchdatei, das Verzeichnis genommen, in dem das Skript gepeichert ist (in den Kommentaren findet man, wie man das durch "das aktuelle Verzeichnis" ersetzen kann, das erscheint mir eigentlich sinnvoller)

Als Kür wird bei jedem Aufruf des Docs die Start und Endzeit gemessen und das Ergebnis für jeden einzelnen Aufruf, wie auch die gesamte Bearbeitungszeit gelistet.
Beispiel:
PS D:\test> .\TSBatch.ps1 .\
Durchsuche .\ nach TS Dateien
17:18:23 bearbeite 20191214 2307 - Kroymann - Der Geburtstag.ts autocheck /log
Bearbeitungsdauer  00:00:22.1923694 Sekunden
17:18:46 bearbeite 20200105 1127 - Die Sendung mit der Maus.ts autocheck /log
Bearbeitungsdauer  00:00:26.5310589 Sekunden
--------------------------------------------------
Gesamtdauer  00:00:48.7264311 Sekunden

(Um den Scheff zu ärgern haben wir mal als Zeitauflösung Picosekunden gewählt  8) )


shaka

#6
Vielen Dank!  Das ist ganz interessant und ich werde mich mal irgendwann damit befassen müssen.

Aber ich bevorzuge "Keep it simple".  8)

In lediglich 6 Zeilen hier eine weitere Variante.  Diesmal werden nur die .TS Dateien gecheckt, die vorher noch nicht gecheckt wurden (check.log nicht vorhanden).


cd /D %~dp0
@FOR %%i IN (*.ts) do @(
            IF NOT EXIST "%%~dpi%%~ni_check.log" (
IF NOT EXIST "%%~dpi%%~ni__check.log" "C:\Program Files (x86)\Cypheros\TSDoctor3\tsdoctor.exe" "%%i" autocheck /log
    )
)



LED ZEPPELIN

Hi Mam,

vielen Dank für das Script.
Funktioniert bei mir leider nicht ganz.
Wenn ich oben ein Verzeichnis z.B. e: wähle startet der Doc auch richtig
Durchsuche e: nach TS Dateien
14:24:23 bearbeite sr-71.ts autocheck /log
und gibt dann aber an "File not found."
Was läuft da falsch?

Da ich vor Programmierung keine Ahnung habe ist es mir auch nicht gelungen den Fehler durch Netzrecherche zu finden.
Vielleicht kannst Du mir weiterhelfen.

Ich versuche eine bat oder PS Datei zu erstellen die HDDs und Unterordner nach ts und TS4 Dateien durchsucht und repariert.
Da es sich um alte FAT 32 HDDs handelt müßte die Automatisierung auch das richtige Zusammenfügen enthalten.

Über Kommandozeile krieg ich das auch nicht hin. Dazu müßte ich sie selbst zusammenfügen bzw. alle Dateien aus den Ordnern holen.

Da kann ich sie auch gleich nacheinander durchlaufen lassen.

Vielen Dank schon mal für Deine Unterstützung.

Beste Grüße

Ingo

Mam

Zitat von: LED ZEPPELIN am Mai 12, 2020, 14:34:04
Was läuft da falsch?

Ich vermute mal "E:" ist das Problem.
Probier mal "E:\"
Das Skript erwartet ja Pfade, keine Laufwerksbuchstaben.
Er bastelt die Kommandozeile zusammen zu "E:" + "sr-71.ts" = "E:sr-71.ts".
Das sieht für uns Menschen so aus, als wenn das die Datei sr-171.ts" im Hauptverzeichnis vom Laufwerk E: sein soll, für den Computer ist das aber was ganz anderes.
Er speichert für jedes Laufwerk das "aktuelle Verzeichnis" ab (also da, wo Du gerade drinbist) und setzt den Pfad immer mit ein, wenn Du keinen selber angibts.
Also, wenn Du z.B. im Verzeichnis E:\Test wars, versucht er die Datei E:\Test\sr-71.ts zu öffnen, was dann wohl kläglich scheitert.

Trägst Du einen Suchpfad ein, der auf "\" endet, so wird diese Automatik deaktiviert.
"E:\" zwingt ihn also, wirklich ins Hauptverzeichnis zu gucken.
Probiers aus und sag Bescheid...
;D

LED ZEPPELIN

Funktioniert leider auch nicht.
Gut ist schon mal dass die Unterordner auch durchsucht werden.
Hast Du eine Idee wie ich das Problem mit dem Zusammenfügen löse?

LED ZEPPELIN

Wenn ich es ohne Veränderungen laufen lasse kommt diese Fehlermeldung:
Split-Path : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist.
In Zeile:27 Zeichen:31
+      $Pfad=$(Split-Path -Path $MyInvocation.MyCommand.Path)
+                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Split-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.SplitPathCommand
Er startet dann aber trotzdem die Dateien in C: zu bearbeiten.

LED ZEPPELIN

Was ich nicht ganz verstehe ist wie ich ins aktuelle Verzeichnis komme.
Bisher starte ich Dein Skript immer über Powershell direkt, da mir nicht klar ist wie ich es im entsprechenden Verzeichnis starten soll mit powershell <Pfad>\TSBatch.PS1 [ [-Pfad] Verzeichnis]"

LED ZEPPELIN

Folgende Fehlermeldung kommt:

PS C:\Users\ICH> e:\TSBatch.PS1
e:\TSBatch.PS1 : Die Datei "E:\TSBatch.PS1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie
unter "about_Execution_Policies" (https:/go.microsoft.com/fwlink/?LinkID=135170).
In Zeile:1 Zeichen:1
+ e:\TSBatch.PS1

LED ZEPPELIN

#13
Hab die Datei wie angegeben unter e: gespeichert und auch zum Laufen bekommen über:
PS C:\WINDOWS\system32> e:\TSBatch.PS1
Durchsuche E:\ nach TS Dateien
16:08:16 bearbeite sr-71.ts autocheck /log
Bearbeitungsdauer  00:00:57.4653029 Sekunden
Leider nach Start des Doc wieder die Fehlermeldung Siehe Anhang

Mam

Zitat von: LED ZEPPELIN am Mai 12, 2020, 16:15:34
Hab die datei wie angegeben unter e: gespeichert und auch zum Laufen bekommen über:
PS C:\WINDOWS\system32> e:\TSBatch.PS1
Durchsuche E:\ nach TS Dateien
16:08:16 bearbeite sr-71.ts autocheck /log
Bearbeitungsdauer  00:00:57.4653029 Sekunden
Leider nach start des Doc wieder die Fehlermeldung Siehe Anhang
hmm, grübel....
Geh mal vorher auf e: (also nicht von C:\Windows\system32 aus starten, sondern erstmal "E:" eingeben und dann mit ".\TSBatch.PS1" starten)

Macht mich aber irgendwie stutzig... Berechtigungsprobleme???


www.cypheros.de