Ordnerüberwachung, Batchdatei aufrufen bei neuer Datei
Hallo,
bin jetzt schon seit gut 3 stunden im netz auf recherche, und komm nicht so recht voran.
eigentlich ist mein ziel recht simpel.
ich habe eine videowall, auf der im loop videos vom vlc angezeigt werden. das funktioniert auch soweit gut, mit systemstart.
der besitzer der videowall möchte allerdings gern von außen neue videos nachreichen können, damit diese dann in den loop integriert werden.
dazu habe ich mir die playlist m3u ausgesucht, da man diese recht einfach auch manuell schreiben kann.
geschrieben habe ich bereits 2 batchdateien, die die playlist datei anpassen, bzw erstellen sofern sie noch nicht vorhanden ist.
damit diese batch dateien funktionieren, müssen sie den dateinamen eines videofiles übergeben bekommen, in diesem fall als argument.
nun möchte ich den ordner überwachen, und immer wenn eine neue datei dort hinzukommt oder eine datei gelöscht wird, die passende batch datei mit dem passenden dateinamen aufrufen und füttern.
tja, und genau da komme ich nicht weiter.
kann mir jemand weiterhelfen?
mein bisheriger code:
create-plist.bat:
delete-plist.bat:
(die timeouts sind nur kosmetik, damit man ne chance hat zu lesen, was das batch so von sich gibt )
Vielen Dank schon mal!
bin jetzt schon seit gut 3 stunden im netz auf recherche, und komm nicht so recht voran.
eigentlich ist mein ziel recht simpel.
ich habe eine videowall, auf der im loop videos vom vlc angezeigt werden. das funktioniert auch soweit gut, mit systemstart.
der besitzer der videowall möchte allerdings gern von außen neue videos nachreichen können, damit diese dann in den loop integriert werden.
dazu habe ich mir die playlist m3u ausgesucht, da man diese recht einfach auch manuell schreiben kann.
geschrieben habe ich bereits 2 batchdateien, die die playlist datei anpassen, bzw erstellen sofern sie noch nicht vorhanden ist.
damit diese batch dateien funktionieren, müssen sie den dateinamen eines videofiles übergeben bekommen, in diesem fall als argument.
nun möchte ich den ordner überwachen, und immer wenn eine neue datei dort hinzukommt oder eine datei gelöscht wird, die passende batch datei mit dem passenden dateinamen aufrufen und füttern.
tja, und genau da komme ich nicht weiter.
kann mir jemand weiterhelfen?
mein bisheriger code:
create-plist.bat:
@echo off
if exist plist.m3u (goto anhang)
echo #EXTM3U > plist.m3u
echo Neue Playlist erstellt
timeout -t 3 -nobreak > nul
:anhang
echo #EXTINF:1,%1>> plist.m3u
echo W:\hardcoded-ordnerpfad\,%1>> plist.m3u
echo Video wurde der Playlist angehaengt
timeout -t 3 -nobreak > nul
exit
delete-plist.bat:
@echo off
"W:\hardcoded-ordnerpfad\plist.m3u" findstr -v %1 "W:\hardcoded-ordnerpfad\plist.m3u"
echo Eintrag aus Playlist geloescht, Playlist neu erstellt
timeout -t 3 -nobreak > nul
exit
(die timeouts sind nur kosmetik, damit man ne chance hat zu lesen, was das batch so von sich gibt )
Vielen Dank schon mal!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 243603
Url: https://administrator.de/contentid/243603
Ausgedruckt am: 26.11.2024 um 09:11 Uhr
16 Kommentare
Neuester Kommentar
Hallo,
falls Du Dich in der .NET-Welt auskennst:
http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher?cs- ...
Gruß,
Gersen
falls Du Dich in der .NET-Welt auskennst:
http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher?cs- ...
Gruß,
Gersen
Ungetestet etwa so:
Wenn's funktioniert wird alle 10s in Ordner strObserve nach einer neuen Datei gesucht (Trigger ist ein entsprechendes Event). Der komplette Pfad dieser Datei wird ermittelt und an deine Batchdatei übergeben.
Grüße
rubberman
Const strObserve = "C:\ordner\der\überwacht\werden\soll"
Const strBatPath = "C:\pfad\deinedatei.bat"
Const strSec = "10"
Set objWSHShell = CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WITHIN " & strSec & " WHERE " _
& "TargetInstance ISA 'CIM_DirectoryContainsFile' AND " _
& "TargetInstance.GroupComponent = 'Win32_Directory.Name=""" _
& Replace(strObserve, "\", "\\\\") _
& """'")
Do
Set objEvent = colEvents.NextEvent()
strFile = Replace(Replace(Split(objEvent.TargetInstance.PartComponent, "=")(1), "\\", "\"), """", "")
objWSHShell.Run "cmd /c """"" & strBatPath & """ """ & strFile & """"""
Loop
Grüße
rubberman
eigentlich nur kopiert...
Joa, deshalb wollte ich ja auch wissen wie die ersten Zeilen bei dir aussehen, et voilà des Rätsels Lösung:Wenn du den letzten Backslash hinter dem Pfad in
strObserve
mal entfernst, sollte es schon funktionieren (hatte ich dir auch anders vorgeturnt ).Ansonsten: Die Batchdateien erben das Arbeitsverzeichnis vom VBScript. Sollte das VBScript also in einem anderen Verzeichnis liegen, dann ergänze in den Batchcodes unter dem
@echo off
noch die Zeilecd /d "%~dp0"
Grüße
rubberman