gelöst Ordner mit .bat überwachen

Mitglied: GreeeNn

GreeeNn (Level 1) - Jetzt verbinden

14.09.2020 um 14:04 Uhr, 455 Aufrufe, 13 Kommentare, 5 Danke

Hallo,

vielleicht kann mir hier jemand weiterhelfen.

Ich möchte einen Ordner mit einer Batch Datei überwache diese soll jede Stunde über die Windows Aufgabenplanung mit Administrativen Rechten gestartet werden.
Die Batch Datei soll einen Ordner überwachen in dem PDF Dateien landen.
Die Dateien werden eigentlich automatisch verschoben jedoch bleiben ab und zu ein paar Dateien hängen.

Aus diesem Grund soll die Batch das Änderungsdatum von allen Dateien die sich zu dieser Zeit im Ordner befinden überprüfen und mit der aktuellen Zeit vergleichen.
Sollte bei einer Datei das Änderungsdatum älter als eine Stunde sein, so weiß die Batch das die Datei nicht automatisch weiter verschoben wurde.
In diesem Fall soll eine Email verschickt werden die diese Information enthält.

Das ganze Funktioniert bei mir schon ganz Gut ich bekomme es nur irgendwie nicht hin die Uhrzeit des Änderungsdatums auszulesen.

Kann mir jemand dazu einen Tipp geben?


Liebe Grüße und vielen Dank im voraus!
Mitglied: TK1987
14.09.2020, aktualisiert um 15:00 Uhr
Moin,

Zitat von GreeeNn:
Die Dateien werden eigentlich automatisch verschoben jedoch bleiben ab und zu ein paar Dateien hängen.
Ich würde in dem Fall eher mal prüfen, wieso diese Dateien hängen bleiben.
Ich möchte einen Ordner mit einer Batch Datei überwache diese soll jede Stunde über die Windows Aufgabenplanung mit Administrativen Rechten gestartet werden.
Die Batch Datei soll einen Ordner überwachen in dem PDF Dateien landen.
Wieso mit Administrativen Rechten?! Sieht mir nicht danach aus, das diese erforderlich wären.
Aus diesem Grund soll die Batch das Änderungsdatum von allen Dateien die sich zu dieser Zeit im Ordner befinden überprüfen und mit der aktuellen Zeit vergleichen.
Mit Batch kaum zu Realisieren, oder man muss schon extrem masochistisch veranlagt sein.

Mit Powershell ein leichtes, jedoch wäre es hier sinnvoller, die gewünschten Aktionen direkt auszuführen, wenn etwas beim verschieben falsch läuft. In jedem Fall besser, als den Ordner zu überwachen.

Mein Vorschlag hier wäre, du postest uns mal dein Batch-Skript, welches die PDF-Dateien verschiebt; und wir schreiben dir das als Powershell-Skript um, damit weiterer Ärger ausbleibt.

Gruß Thomas
Bitte warten ..
Mitglied: GreeeNn
14.09.2020 um 15:17 Uhr
Hi,

danke schon mal für deine Antwort.

Die Dateien werden eigentlich automatisch verschoben jedoch bleiben ab und zu ein paar Dateien hängen.
Ich würde in dem Fall eher mal prüfen, wieso diese Dateien hängen bleiben.

Hab ich schon versucht aber keine Lösung daür gefunden, deswegen wollte ich das Script dazu schalten.

Ich möchte einen Ordner mit einer Batch Datei überwache diese soll jede Stunde über die Windows Aufgabenplanung mit Administrativen Rechten gestartet werden.
Die Batch Datei soll einen Ordner überwachen in dem PDF Dateien landen.
Wieso mit Administrativen Rechten?! Sieht mir nicht danach aus, das diese erforderlich wären.

Am Ende der Batch wird die Powershell mit SendmailMessage aufgerufen um die Email zu verschicken. Dafür werden die Administrativen Rechte benötigt.

Mein aktueller Code Funktioniert Perfekt, jedoch prüft er auf das Datum und nicht auf die Uhrzeit.

Ein paar Sachen musste ich durch "XXX" ersetzen, diese sind nicht zu beachten.

PS:

Ich bin nicht sonderlich geübt mit Batch Scripting also falls du gleich die Hände über dem Kopf zusammenschlägst^^

Bitte warten ..
Mitglied: TK1987
14.09.2020 um 15:52 Uhr
Das ist ein Skript zum überwachen des Ordners. Wie bereits erwähnt, bitte das Skript posten, welches die PDF-Dateien verschiebt.

Das Ziel sollte hier sollte sein: Das Skript veruscht die Dateien zu verschieben, falls dies (warum auch immer) fehlschlägt, wird eine E-Mail mit Details zu dem Fehler rausgeschickt. Damit ist ein zweites Skript welches den Ordner überwacht überflüssig.
Bitte warten ..
Mitglied: miniversum
14.09.2020 um 17:21 Uhr
Hallo,

Die Batch stimmt schon fast. Da ist nur ein kleiner Fehler drin der die Ausführung verhindert.
Batch kentn das Format "Datum" nicht, nur Zahlen.
Deshalb musst du einfach dein Datum von %%~ti und von heute im Format YYYMMDD ist, also nur anders zusammengesetzt. Dann klappt das "if !Heute! NEQ !Datum!" auch.

Der Aufwand hällt sich also doch in Grenzen...

Gruß
...
Bitte warten ..
Mitglied: erikro
14.09.2020, aktualisiert um 18:12 Uhr
Moin,

oder halt einfach mit der Powershell in einer Zeile:

hth

Erik

<edit>Ooops, da fehlte eine Klammer.</edit>
Bitte warten ..
Mitglied: GreeeNn
15.09.2020 um 08:14 Uhr
Moin ,

danke schon mal für den Tipp!

Wie oben schon erwähnt ist das der jetzige stand wo auf das Datum geprüft wird.

Deshalb musst du einfach dein Datum von %%~ti und von heute im Format YYYMMDD ist, also nur anders zusammengesetzt. Dann klappt das "if !Heute! NEQ !Datum!" auch.

In der neuen Version würde ich aber lieber die aktuelle Systemzeit mit dem Änderungsdatum der Datei vergleichen.
Sprich wenn die Uhrzeit die im änderungsdatum steht, älter als eine Stunde ist schicke eine Email.

Irgendwelche Tipps dazu?


Beste Grüße
Bitte warten ..
Mitglied: GreeeNn
15.09.2020 um 08:17 Uhr
Hey,

danke für deinen Lösungsansatz @erikro!


Könntest du den Code weiter ausführen oder bisschen erklären?
Mit Powershell habe ich ebenso wenig Erfahrung.

Vielen Dank und Grüße!
Bitte warten ..
Mitglied: GreeeNn
15.09.2020 um 09:17 Uhr
Moin,

Das Ziel sollte hier sollte sein: Das Skript veruscht die Dateien zu verschieben, falls dies (warum auch immer) fehlschlägt, wird eine E-Mail mit Details zu dem Fehler rausgeschickt. Damit ist ein zweites Skript welches den Ordner überwacht überflüssig.

Natürlich wäre es der Optimalfall das Skript das die Daten verschieb zu verbessern.
Jedoch habe ich die Anweisung bekommen diese Überwachung einzurichten, da der fall das die Daten nicht verschoben werden relativ selten eintritt.

Viele Grüße!
Bitte warten ..
Mitglied: erikro
LÖSUNG 15.09.2020, aktualisiert 17.09.2020
Moin,

Zitat von GreeeNn:
danke für deinen Lösungsansatz @erikro!



Wenn Du so lieb fragst.

Ist jetzt nicht mehr eine Zeile, aber so würde ich das als Skript schreiben. Ist übersichtlicher und schneller als der Einzeiler.

Und jetzt noch ein paar Worte zum Einzeiler:

1. Eine der wichtigsten Techniken der Powershell vor allem auf der Konsole ist die Pipe (|). Dabei wird die Ausgabe eines Befehls als Stream dem nächsten Befehl übergeben. Sehr praktisch.
2. % ist eine Abkürzung (ein Alias genau gesagt) für foreach-object.
3. $_ ist die Variable, in der das Objekt steht aus der Pipe, das gerade dran ist.

hth

Erik
Bitte warten ..
Mitglied: erikro
15.09.2020 um 20:54 Uhr
Moin,

Zitat von GreeeNn:
Natürlich wäre es der Optimalfall das Skript das die Daten verschieb zu verbessern.
Jedoch habe ich die Anweisung bekommen diese Überwachung einzurichten, da der fall das die Daten nicht verschoben werden relativ selten eintritt.

Dann rücke doch mal das Skript raus. Meine Glaskugel sagt mir nämlich folgendes:

Das Skript sieht so aus:

Und dann haben wir eine race condition. Dauert das, was da gemacht wird, zu lange, wird schon der Verschiebebefehl ausgeführt, der aber gegen die Wand läuft, weil noch ein lock auf der Datei ist. Besser wäre so ein Konstrukt:

Liebe Grüße

Erik
Bitte warten ..
Mitglied: miniversum
LÖSUNG 17.09.2020 um 06:22 Uhr
Hallo,

Wenn du die Zeit vergleichen willst dann nimm für heute halt %time% statt %date% oder noch besser beides und in der for Schleife in Zeile 21 holst du dir dann beides raus.
Das Prinzip ist das selbe nur halt im Format YYMMTThhmmss. Das aufaddieren von 1 Stunde mit Berücksichtigung des Datums geht in Batch (wurde hier auch schon mal beschrieben), ist aber mit einem gewissen Aufwand verbunden. Da wäre dann eine andere Skriptsprache, zumindest teilweise, doch besser geeignet.

Gruß
...
Bitte warten ..
Mitglied: GreeeNn
17.09.2020 um 15:16 Uhr
Hey vielen Danke schon mal für die gute Erklärung @erikro!

Ich bin gerade dabei dein Powershell Skript auf meine Anforderungen anzupassen dabei ist mir ein kleiner Fehler aufgefallen den ich gerne verbesser würde.

$typ="pdf",
$path, # Pfad des zu überwachenden Ordners eintragen
$time= (get-date).addhour(-1), # Holt das aktuelle Datum mit Zeit und zieht eine Stunde ab

.addhour muss durch .addhours ersetzt werden da anstonsten ein Fehler kommt.

So ist es zumindest bei mir.


Viele Grüße!
Bitte warten ..
Mitglied: erikro
17.09.2020 um 16:41 Uhr
Zitat von GreeeNn:

Hey vielen Danke schon mal für die gute Erklärung @erikro!

Gerne.


Ich bin gerade dabei dein Powershell Skript auf meine Anforderungen anzupassen dabei ist mir ein kleiner Fehler aufgefallen den ich gerne verbesser würde.

$typ="pdf",
$path, # Pfad des zu überwachenden Ordners eintragen
$time= (get-date).addhour(-1), # Holt das aktuelle Datum mit Zeit und zieht eine Stunde ab

.addhour muss durch .addhours ersetzt werden da anstonsten ein Fehler kommt.

Oooops. Ja, es muss der Plural sein. Ich habe es oben korrigiert. Danke für den Hinweis.
Bitte warten ..
Heiß diskutierte Inhalte
Switche und Hubs
Kaufberatung (10G) Switche für Unternehmensnetzwerk
ipzipzapFrageSwitche und Hubs27 Kommentare

Moin, unsere Firma zieht um und am neu renovierten Standort muss/soll alles neu. Auf drei Etagen stehen Racks, in ...

Drucker und Scanner
Vorlage Endlospapier Nadeldrucker
Hanspeter82FrageDrucker und Scanner17 Kommentare

Hallo, hab die Aufagbe bekommen, eine Vorlage zuerstellen bzgl. Druck auf Endlos Papier über einen Nadeldrucker. Habe allerdings kein ...

Exchange Server
Primäre Mailadresse auf Kleinbuchstaben anpassen
JoergDdorfFrageExchange Server16 Kommentare

Hallo Alle, wir betreiben ein Exchange Hybrid (2016/365). Ich stehe vor dem Problem, dass ich die bestehenden primären Mailadresse ...

Windows Userverwaltung
Active Directory Gruppen auslesen
gelöst MMaiwaldFrageWindows Userverwaltung12 Kommentare

Guten Abend, ich habe mir das Codeschnipsel geschnappt und möchte dieses noch erweitern. Dazu möchte ich noch die Beschreibung ...

LAN, WAN, Wireless
2 Lan Dosen (Unterputz) miteinander Verbinden
gelöst RickHHFrageLAN, WAN, Wireless12 Kommentare

Moin zusammen, ich würde mir gerne auf dem Dachboden 2 Landosen in einen Raum Bauen. Ein Netzwerkkabel geht hoch, ...

Windows Netzwerk
Tool zum prüfen ob Gerät noch online ist
Ringi1970FrageWindows Netzwerk10 Kommentare

Hallo zusammen, ich suche nach einer Freeware, die mir bestimmte Geräte / Workstations (Windows Geräte, feste IP Adressen) prüft ...

Ähnliche Inhalte
Weiterbildung
Bat Dateien
fajo23FrageWeiterbildung20 Kommentare

Ich habe folgendes Problem. Ich habe auf meiner Festplatte viele Dateinamen die wie folgt aussehen: 20180126 2355 - Dlf ...

Batch & Shell
Anpassung BAT-File
gelöst Fizzo361FrageBatch & Shell2 Kommentare

Hi Forum, ich habe eine recht simple frage an euch, ich habe dieses Script vorliegen, das Funktioniert auch einwandfrei. ...

Windows 10
BAT Text-Farbe ändern
DalationFrageWindows 101 Kommentar

Guten Tag, Ich lerne grade die Grundlagen von BAT. Dazu hätte ich folgende Frage: Ist es möglich, dass sich ...

Entwicklung
Hilfe bei .bat script
gelöst RUBEN123FrageEntwicklung1 Kommentar

Hallo, ich würde gerne erreichen, dass man bei meinem BAT script einen Link aus dem Internet eingibt, der dann ...

Batch & Shell
CMD BAT Dateien verarbeiten
gelöst ITSharkFrageBatch & Shell9 Kommentare

Hallo zusammen, folgendes Problem bzw. folgende Herausforderung habe ich. Ich habe ca. 2000 TXT Dateien welche ich zusammenführen will. ...

Batch & Shell

Bestimmte Textpassagen via bat löschen

gelöst Grisu84FrageBatch & Shell11 Kommentare

Hallo, ich habe eine txt-Datei, in welcher ich durch eine bat bestimmte Zeilen löschen möchte. So soll die Datei ...

Berechtigungs- und IdentitätsmanagementBerechtigungs- und IdentitätsmanagementWebdienste und -serverWebdienste und -serverDatenbankenDatenbankenMonitoring & SupportMonitoring & SupportHybrid CloudHybrid CloudSmall Business ITSmall Business IT