Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ordnerüberwachung, Batchdatei aufrufen bei neuer Datei

Frage Entwicklung Batch & Shell

Mitglied: kingspride

kingspride (Level 1) - Jetzt verbinden

14.07.2014, aktualisiert 16.07.2014, 3159 Aufrufe, 16 Kommentare, 1 Danke

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:

01.
 
02.
@echo off 
03.
 
04.
if exist plist.m3u (goto anhang) 
05.
echo #EXTM3U > plist.m3u 
06.
echo Neue Playlist erstellt 
07.
 
08.
timeout -t 3 -nobreak > nul 
09.
 
10.
:anhang 
11.
echo #EXTINF:1,%1>> plist.m3u 
12.
echo W:\hardcoded-ordnerpfad\,%1>> plist.m3u 
13.
echo Video wurde der Playlist angehaengt 
14.
 
15.
timeout -t 3 -nobreak > nul 
16.
 
17.
exit 
18.
 
delete-plist.bat:

01.
 
02.
@echo off 
03.
 
04.
"W:\hardcoded-ordnerpfad\plist.m3u" findstr -v %1 "W:\hardcoded-ordnerpfad\plist.m3u" 
05.
 
06.
echo Eintrag aus Playlist geloescht, Playlist neu erstellt 
07.
timeout -t 3 -nobreak > nul 
08.
 
09.
exit 
10.
 
(die timeouts sind nur kosmetik, damit man ne chance hat zu lesen, was das batch so von sich gibt )

Vielen Dank schon mal!
Mitglied: rubberman
14.07.2014 um 21:59 Uhr
Hallo kingspride.

Die WMI ist ein geeignetes Mittel. Wäre ein VBScript für dich in Ordnung?

Grüße
rubberman
Bitte warten ..
Mitglied: kingspride
14.07.2014 um 22:09 Uhr
hey, vbs ginge auch, kenn mich damit halt nicht aus. wäre super, wenn du dazu dann noch ein zwei worte schreiben könntest, damit ich verstehe was du mir vorschlägst

danke auf jedenfall schon für die schnelle antwort!
Bitte warten ..
Mitglied: Gersen
14.07.2014 um 22:27 Uhr
Hallo,

falls Du Dich in der .NET-Welt auskennst:

http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher?cs- ...

Gruß,
Gersen
Bitte warten ..
Mitglied: rubberman
LÖSUNG 14.07.2014, aktualisiert 16.07.2014
Ungetestet etwa so:
01.
Const strObserve = "C:\ordner\der\überwacht\werden\soll" 
02.
Const strBatPath = "C:\pfad\deinedatei.bat" 
03.
Const strSec = "10" 
04.
 
05.
Set objWSHShell = CreateObject("WScript.Shell") 
06.
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 
07.
Set colEvents = objWMIService.ExecNotificationQuery _ 
08.
  ("SELECT * FROM __InstanceCreationEvent WITHIN " & strSec & " WHERE " _ 
09.
  & "TargetInstance ISA 'CIM_DirectoryContainsFile' AND " _ 
10.
  & "TargetInstance.GroupComponent = 'Win32_Directory.Name=""" _ 
11.
  & Replace(strObserve, "\", "\\\\") _ 
12.
  & """'") 
13.
 
14.
Do 
15.
  Set objEvent = colEvents.NextEvent() 
16.
  strFile = Replace(Replace(Split(objEvent.TargetInstance.PartComponent, "=")(1), "\\", "\"), """", "") 
17.
  objWSHShell.Run "cmd /c """"" & strBatPath & """ """ & strFile & """""" 
18.
Loop
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
Bitte warten ..
Mitglied: kingspride
14.07.2014, aktualisiert um 22:42 Uhr
vielen dank

teste es gleich.

noch eine frage: ordner mit leerstelle im namen dürfte kein problem darstellen, richtig? sind ja anführungszeichen da...

(und wenn du mir noch eine schreibst für das event, dass eine datei entfernt wird, wäre ich vollends glücklich )

edit: schade, funktioniert noch nicht. zeile 6, nicht analysierbare abfrage...
Bitte warten ..
Mitglied: rubberman
14.07.2014, aktualisiert um 23:07 Uhr
(und wenn du mir noch eine schreibst für das event, dass eine datei entfernt wird, wäre ich vollends glücklich )
Statt __InstanceCreationEvent ein __InstanceDeletionEvent in Zeile 8.

Grüße
rubberman
Bitte warten ..
Mitglied: kingspride
14.07.2014 um 22:44 Uhr
danke ! btw, meinte zeile 7, nicht 6.
Bitte warten ..
Mitglied: rubberman
14.07.2014, aktualisiert um 23:06 Uhr
Hmm, dann muss ich wohl doch selbst mal testen.

EDIT OK, Kleiner Schreibfehler. Hab's oben im Code geändert. (Kill ggf. das alte Script im Taskmanager wscript.exe)
Bitte warten ..
Mitglied: rubberman
14.07.2014 um 23:33 Uhr
Sorry, war noch ein Fehler drin...
Bitte warten ..
Mitglied: kingspride
15.07.2014 um 00:05 Uhr
hey, danke dir nochmals

allerdings scheint immernoch was nicht zu klappen
das script startet, bleibt im hintergrund laufen, aber es passiert einfach nix, wenn ich eine neue datei in den ordner kopiere?
kann es sein, dass ein leerzeichen im pfad das problem ist, oder müsste das gehen?

vielen dank nochmals, du hast mir schon irsinnig viel weitergeholfen.
Bitte warten ..
Mitglied: rubberman
15.07.2014 um 00:26 Uhr
Ich hab mit Leerzeichen im Pfad getestet, funktioniert bei mir.

Wenn's kein zu großes Geheimnis ist, poste doch mal wie die ersten 3 Zeilen bei dir in der Realität aussehen.
Bitte warten ..
Mitglied: kingspride
16.07.2014 um 17:31 Uhr
01.
Const strObserve = "W:\Bibliotheken\Videos\videowall axel\" 
02.
Const strBatPath = "W:\Bibliotheken\Videos\videowall axel\create-playlist.bat" 
03.
Const strSec = "10" 
04.
 
05.
Set objWSHShell = CreateObject("WScript.Shell")  
06.
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")  
07.
Set colEvents = objWMIService.ExecNotificationQuery _  
08.
	("SELECT * FROM __InstanceCreationEvent WITHIN " & strSec & " WHERE " _  
09.
	& "TargetInstance ISA 'CIM_DirectoryContainsFile' AND " _  
10.
	& "TargetInstance.GroupComponent = 'Win32_Directory.Name=""" _  
11.
	& Replace(strObserve, "\", "\\\\") _  
12.
	& """'")  
13.
 
14.
Do 
15.
	Set objEvent = colEvents.NextEvent()  
16.
	strFile = Replace(Replace(Split(objEvent.TargetInstance.PartComponent, "=")(1), "\\", "\"), """", "")  
17.
	objWSHShell.Run "cmd /c """"" & strBatPath & """ """ & strFile & """"""  
18.
Loop
eigentlich nur kopiert...
Bitte warten ..
Mitglied: rubberman
LÖSUNG 16.07.2014, aktualisiert um 18:13 Uhr
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 Zeile
cd /d "%~dp0"

Grüße
rubberman
Bitte warten ..
Mitglied: kingspride
16.07.2014 um 18:06 Uhr
vielen dank, funktioniert jetzt!!

dass mit den slashes passiert mir leider ständig^^
jeder brauchts anders...

jetzt hab ich nur noch eine frage.

der pfad wird scheinbar mit anführungszeichen übergeben, kann ich das irgendwie loswerden?
m3u hat damit leider probleme.
Bitte warten ..
Mitglied: rubberman
LÖSUNG 16.07.2014, aktualisiert um 18:13 Uhr
Ja klar. %1 enthält den übergebenen Parameter so wie er ankommt.
Die Tilde in %~1 würde umschließende Anführungszeichen entfernen.

Grüße
rubberman
Bitte warten ..
Mitglied: kingspride
16.07.2014 um 18:13 Uhr
ahhh danke!

geht jetzt alles.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst In Html-Datei per Batchdatei das Datum und die Uhrzeit eintragen (2)

Frage von Hakiegold zum Thema Batch & Shell ...

Windows Tools
Robocopy . Datei im Zielverzeichnis nur überschreiben, wenn neuer (7)

Frage von gnrmarcel zum Thema Windows Tools ...

Batch & Shell
gelöst In Batchdatei Variablen befüllen - mit Werten aus einer TXT-Datei (6)

Frage von donnyS73lb zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...