schnoedl
Goto Top

Suche bzw. automatische löschung von Videos

Hallo,

ich hoffe dass mir jemand hier helfen kann.

Ich möchte Videos (.mp4) anhand von der Länge (diese ist im Windows Explorer unter dem Attribut "Länge" sichtbar) automatisiert suchen bzw. wenn möglich auch löschen.

Unter der Windows Suche ist es möglich "Länge:X" einzugeben, die kleinste Einheit ist hier aber nur unter 1. Minute, ich würde aber gerne die Videos im Sekundenbereich suchen bzw. löschen.


Gibt es ein Tool um Videos mit einer bestimmten Länge zu finden/löschen?

Am besten wäre hier ein Batch File =)


Konkret soll automatisiert alle 2 Stunden Videos mit einer bestimmten Länge gelöscht werden.


Wenn das ganze noch in Unterordner suchen kann wäre es optimal.


lG Stefan

Content-Key: 331353

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

Ausgedruckt am: 29.03.2024 um 04:03 Uhr

Mitglied: rubberman
rubberman 06.03.2017 um 20:46:42 Uhr
Goto Top
Hallo Stefan

Am besten wäre hier ein Batch File =)
Naja, pur eher nicht. Zumindest ein Hybridscript.
Konzept:
@if (@a)==(@b) @end /* Batch Part:

@echo off &setlocal
for /r %%i in (*.mp4) do (
  for /f %%j in ('cscript //nologo //e:jscript "%~fs0" "%%~i"') do echo %%j s, %%i 
)
pause
exit /b


JScript Part: */
if (WScript.Arguments.Count() == 0) {WScript.Quit();}
var objFSO = WScript.CreateObject('Scripting.FileSystemObject');  
var FileFullName = objFSO.GetAbsolutePathName(WScript.Arguments(0));
var objADOS = WScript.CreateObject('ADODB.Stream');  
objADOS.Type=2;
objADOS.Charset = 'UTF-16';  
objADOS.Open();
objADOS.WriteText(WScript.CreateObject('Shell.Application').NameSpace(objFSO.GetParentFolderName(FileFullName)).ParseName(objFSO.GetFileName(FileFullName)).ExtendedProperty('Duration'));  
objADOS.Position=0;
WScript.Echo(Math.round(objADOS.ReadText()/10000000));
Das Script listet im Moment nur mit Länge in Sekunden auf. Da brauchst du nur noch einen IF Vergleich für das Löschen zu implementieren ...

automatisiert alle 2 Stunden
Das machst du mit der Aufgabenplanung.

Grüße
rubberman
Mitglied: Schnoedl
Schnoedl 07.03.2017 um 20:30:08 Uhr
Goto Top
Hallo,

danke für dein Script! Das schaut schon mal sehr gut aus!

Die Videos listet er auf, und auf der linken Seite zeigt er die Sekunden an.


Das "nur noch" ist immer so eine Sache für Nichtwissende =)

Kannst du mir auch bei diesem "IF Vergleich" weiterhelfen?


Das mit auf Aufgabenplannung schaffe ich sicher alleine.


Wäre super!

lG Stefan
Mitglied: rubberman
Lösung rubberman 07.03.2017 um 21:24:19 Uhr
Goto Top
Nichtwissende
... könnten zumindest Google anwerfen und lernen.
Wie auch immer, IF vergleicht, LSS steht für "kleiner als", DEL löscht eine Datei. Hättest du in 5 Minuten gewusst.
Einzige wirkliche Herausforderung wäre gewesen, dass bei einem geplanten Task das Arbeitsverzeichnis nicht gleich dem Verzeichnis deiner Batchdatei sein könnte. Da brauchst du noch die Anpassung per CD /D im Batchcode und CurrentDirectory Eigenschaft im JScript.

@if (@a)==(@b) @end /* Batch Part:

@echo off &setlocal
cd /d "%~dp0" 
for /r %%i in (*.mp4) do (
  for /f %%j in ('cscript //nologo //e:jscript "%~fs0" "%%~i"') do if %%j lss 20 del "%%~i" 
)
pause
exit /b


JScript Part: */
var objFSO = WScript.CreateObject('Scripting.FileSystemObject');  
var objWShell = WScript.CreateObject('WScript.Shell');  
objWShell.CurrentDirectory = objFSO.GetParentFolderName(WScript.ScriptFullName);
var FileFullName = objFSO.GetAbsolutePathName(WScript.Arguments(0));
var objADOS = WScript.CreateObject('ADODB.Stream');  
objADOS.Type=2;
objADOS.Charset = 'UTF-16';  
objADOS.Open();
objADOS.WriteText(WScript.CreateObject('Shell.Application').NameSpace(objFSO.GetParentFolderName(FileFullName)).ParseName(objFSO.GetFileName(FileFullName)).ExtendedProperty('Duration'));  
objADOS.Position=0;
WScript.Echo(Math.round(objADOS.ReadText()/10000000));

Grüße
rubberman