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-ID: 381109

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

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

rubberman
rubberman 23.07.2018 aktualisiert um 16:07:28 Uhr
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
mmaaxxii
mmaaxxii 24.07.2018 um 07:54:28 Uhr
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
rubberman
rubberman 24.07.2018 aktualisiert um 09:06:51 Uhr
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
mmaaxxii
mmaaxxii 24.07.2018 um 15:20:40 Uhr
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
Zendara
Zendara 24.07.2018 aktualisiert um 17:15:12 Uhr
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
rubberman
rubberman 24.07.2018 um 17:59:55 Uhr
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
mmaaxxii
mmaaxxii 25.07.2018 um 06:22:23 Uhr
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.
rubberman
rubberman 25.07.2018 aktualisiert um 09:01:29 Uhr
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
mmaaxxii
mmaaxxii 25.07.2018 um 15:17:20 Uhr
Goto Top
Ich probiere es mal aus..

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

Gruß Max