mmaaxxii
Goto Top

Batch - Datei zum abfangen einer Datei inkl. Abfrage

Guten Tag,

da ich bisher noch nichts vergleichbares gefunden habe und blutiger Anfänger in diesem Gebiet bin wende ich mich an euch face-smile

Ich brauche eine Batch Datei die es mir ermöglicht 2 Dateien abzufangen dann eine Abfrage zu starten und diese 2 Dateien je nach Auswahl der Abfrage weiterzuschicken oder zu löschen.

Danke im Voraus.

Gruß Max

Content-Key: 381109

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

Printed on: April 24, 2024 at 12:04 o'clock

Member: rubberman
rubberman Jul 23, 2018 updated at 14:07:28 (UTC)
Goto Top
Sorry, aber deine Frage enthält keine brauchbaren Informationen um eine Antwort geben zu können.

abzufangen
Von wo, was bedeutet das genau?

je nach Auswahl der Abfrage
Was für eine Abfrage? Dateiname, Dateiinhalt, welche Art von Datei, ...?

weiterzuschicken
Email? Wenn ja wie (POP3, ...)?

Von welchem Betriebssystem und Umfeld reden wir?

Steffen
Member: mmaaxxii
mmaaxxii Jul 24, 2018 at 05:54:28 (UTC)
Goto Top
Guten Morgen,

Es handelt sich um 2 Dateien (.dfd/.dfx). Diese werden erstellt und landen dann in einem voreingestellten Pfad.

Zur Info, es geht um eine Messmaschine, diese erstellt Messprotokolle, die Messdaten werden in den zwei oben genannten Formaten abgespeichert. Ein anderes Programm holt diese Daten im 20 sekunden Takt ab und speichert sie.

Mein Vorhaben ist jetzt, dass die Daten(.dfd/.dfx) abgefangen werden(evtl. ausgeschnitten o.ä.) dann eine Abfrage gestartet wird mit "Ja, freigeben" und "Nein, löschen".
Der Rest ist selbsterklärend.. Je nachdem welche Auswahl ich treffe, sollte dann die Datei wieder zurück in den Pfad wandern oder gelöscht werden.

Es handelt sich um Windows 10.

Gruß Max
Member: rubberman
rubberman Jul 24, 2018 updated at 07:06:51 (UTC)
Goto Top
Was ich schon mal sagen kann, ist, das macht man keinesfalls mit Batch. Hier muss ein Creation Event abgefangen werden. Geht sicherlich mit Powershell, VBScript, JScript, ... mit WMI Unterstützung. Wenn ich nach Feierabend Zeit habe und du noch keine Lösung bekommen hast, schreibe ich die paar Zeilen. However, es wird dich nicht davor schützen, dass just imselben Moment wo das Script die Datei verschieben will, dein anderes Programm um die Ecke kommt um die Daten abzuholen. Ich kann nur empfehlen die Verzeichnisse wo die Dateien erstellt werden und wo sie vom anderen Programm abgeholt werden sollen, zukünftig strikt zu trennen. Sonst geht das definitiv in die Hose.

Steffen
Member: mmaaxxii
mmaaxxii Jul 24, 2018 at 13:20:40 (UTC)
Goto Top
Ok, vielen Dank mal für die Infos..

Ich habe eine andere Idee, da bräuchte ich eigentlich nur eine Batch Datei die mir die zwei Dateien verschiebt.

Bsp.:

Von X:/Neuer Ordner/xxxxxxx.dfd und .dfx nach X:/Neuer Ordner 1

Gruß Max
Member: Zendara
Zendara Jul 24, 2018 updated at 15:15:12 (UTC)
Goto Top
Hallo Max,

hier ein Ansatz mit dem du das Verschieben umsetzen könntest.

set "quelle=X:/Neuer Ordner"  
set "ziel=X:/Neuer Ordner 1"  

set "name=xxxxxxx"  

if exist "%quelle%\%name%.*" xcopy "%quelle%\%name%.*" "%ziel%\"  
del "%quelle%\%name%.*" /P  
pause

Lg
Zendara
Member: rubberman
rubberman Jul 24, 2018 at 15:59:55 (UTC)
Goto Top
Zitat von @mmaaxxii:
nur eine Batch Datei
Nein, wie oben bereits geschrieben musst du Events überwachen.

die mir die zwei Dateien verschiebt.
Von mir aus auch einfach nur verschieben. Macht kaum einen Unterschied.

VBScript (.vbs)
Option Explicit

Const Source      = "X:\Neuer Ordner"  
Const Destination = "X:\Neuer Ordner 1"  

Dim oFSO, oEvent, colEvents
Dim sDrive, sFolder

Set oFSO = CreateObject("Scripting.FileSystemObject")  
sDrive = oFSO.GetDriveName(Source)
sFolder = Replace(Mid(Source, 3) & "\", "\", "\\", 1, -1, vbTextCompare)  

Set colEvents = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecNotificationQuery( _  
  "SELECT * FROM __InstanceCreationEvent" _  
  & " WITHIN 1" _  
  & " WHERE Targetinstance ISA 'CIM_DataFile'" _  
  & " AND TargetInstance.Drive='" & sDrive & "'" _  
  & " AND TargetInstance.Path='" & sFolder & "'")  

Do
  Set oEvent = colEvents.NextEvent()
  If StrComp(oFSO.GetExtensionName(oEvent.TargetInstance.Name), "dfd", 1) = 0 Or StrComp(oFSO.GetExtensionName(oEvent.TargetInstance.Name), "dfx", 1) = 0 Then  
    oFSO.MoveFile oEvent.TargetInstance.Name, Destination & "\" & oFSO.GetFileName(oEvent.TargetInstance.Name)  
  End If
Loop
Das Script rennt in einem wscript.exe Prozess ohne Fenster. Die beiden Pfade müssen vorab existieren. Bereits vor dem Start vorhandene Dateien werden nicht verschoben. Sollte eine Datei mit gleichem Name bereits im Zielverzeichnis existieren, bricht das Script mit Fehlermeldung ab.

Steffen
Member: mmaaxxii
mmaaxxii Jul 25, 2018 at 04:22:23 (UTC)
Goto Top
Guten Morgen,

funktioniert das so dann nicht?

@echo off

move C:\NeuerOrdner\*.dfd C:\NeuerOrdner1
move C:\NeuerOrdner\*.dfx C:\NeuerOrdner1

exit

Ganz primitiv.
Member: rubberman
rubberman Jul 25, 2018 updated at 07:01:29 (UTC)
Goto Top
Kannst du alles machen, baust deine eigene Pollingschleife und musst mit der CPU Last leben, die dir das erzeugt. Also Gegenfrage, funktioniert das denn mit dem VBScript nicht, ganz primitiv und auch noch ohne störendes Fenster?

Steffen
Member: mmaaxxii
mmaaxxii Jul 25, 2018 at 13:17:20 (UTC)
Goto Top
Ich probiere es mal aus..

Kenne mich mit VBScript halt gar nicht aus. face-sad

Gruß Max