joeyschweiz
Goto Top

BATCH um Dateien zu löschen die ein bestimmtest Wort enthalten

und immer wieder hier im Forum wenn es um komische Dinge geht face-smile

Folgendes Problem.

Es werden XML Dateien per Batch von einem Portal abgerufen.

Die Verarbeitung ist soweit ok nur ab und zu erhalten wir in einem File einen ERROR Code...
wenn diese Daten aufläuft crashed die Schnittstelle.

Daher möchte ich die XML Dateien durchsuchen.


Folgender Gedanke:

Wenn "ERROR code=" vorhanden ist soll die Datei direkt gelöscht oder in ein Ordner "Error" verschoben werden.


Der Ansatz::
@echo off 
rem StartPfad C:\transfer
set "StartPfad=C:\transfer"   


set "DateiMaske=*.xml"   
set "SuchString= ## ERROR ## "   


for /f "delims=" %%i in ('findstr /s /m /c:"%SuchString%" "%StartPfad%\%DateiMaske%"') do del "%%i"  

(ja ich weiss der code ist auch schon hier aus dem Forum face-smile )


Kann mir jemand von den "Göttern" helfen?


Danke und super Wochenende.

[Edit Biber] Codetags. [/Edit]

Content-ID: 164238

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

Ausgedruckt am: 08.11.2024 um 07:11 Uhr

Biber
Biber 08.04.2011 um 17:17:00 Uhr
Goto Top
Moin joeyschweiz,

keine Ahnung, wann hier die "Götter" vorbeikommen - bis es soweit ist, versuch ich dich mal hinzuhalten..

Also - in Prinzip würde deine Skizze doch genau das tun, was sie soll....

Handwerklich zu ändern wäre (bei Langeweile oder Hang zum Perfektionismus) bestenfalls
  • wahlweise die erste Zeile erweitern um ein " & Setlocal", damit deine Privat-Batch-Variablen nicht mit anderen Umgebungsvariablen kollidieren können
  • oder aber in diesem Fall auf Variablen ganz verzichten. Alle Variablen werden nur ein einziges Mal benötigt und der Variablenname ist ja fast länger als der Inhalt.

Soweit die guten Nachrichten.
Es bleibt aber die die Frage, ob der Schnipsel denn wirklich das tun sollte, was du ihm da vorgibst...

Irgendein Prozess erzeugt *.XML-Dateien - einige davon zwar mit richtigem Namen, aber mit unverarbeitbarem Inhalt, wenn ich dich richtig lese.

Dennoch führen ja diese inhaltlich falschen *.XMLs zu Fehler, weil sie angefasst werden.
Demnach werden sie ja von Namen her erwartet.... bist du sicher, dass ein Löschen/Verschieben keine anderen Fehler produziert?

Ausserdem - ich würde niemalsnich Dateien blind löschen, nur weil sie ein Wort/eine Zeile enthalten.
Vielleicht ist ja genau dieses Wort in einer Kommentarzeile oder als Prosa in einem Hilfetext oder oder oder in einer eigentlich verarbeitbaren *.xml.

--> ist der Plan wirklich ausgereift?

Und noch die dumme Frage von mir:
wieso produzierte Fehler nachbehandeln mit halbmanuellen Folgeprozessen?
Wieso nicht mit Prio 1 die Fehlererzeugung abstellen? Das muss doch etwas sein, was unter Schwestern aus "Bug" bewertet werden muss.

Es sei denn, ihr könnt die Vorher-Appz nicht richtig bedienen, dann investiere in Schulungsmassnahmen.

Grüße
Biber

P.S.
Zitat von @joeyschweiz:
Die Verarbeitung ist soweit ok nur ab und zu .....
Wegen dieser IT-typischen Formulierungen liebe ich meinen Job... face-wink
Erzähl doch mal beim nächsten nachbarschaftlichen Grillen "Meine Schwiegermutti ist soweit ok nur ab und zu...".
Also wenn deine Frau danebensitzt natürlich.
Skyemugen
Skyemugen 08.04.2011 um 17:32:47 Uhr
Goto Top
Aloha,

abgesehen von Bibers berechtigtem Einwand, möchte ich dir mitteilen, dass du keine Hilfe unbedingt dafür benötigst ...

Du hast:
set "SuchString= ## ERROR ## "
du möchtest statt
 ## ERROR ## 
lieber
ERROR code=
haben ...

Für das Verschieben (sofern du dir Bibers Post durchgelesen hast und es immer noch willst) empfehle ich dir den Befehl move, den du für das del ersetzt und noch deinen Wunschpfad als Letztes hinzufügst ...

greetz André
99045
99045 08.04.2011 um 17:33:55 Uhr
Goto Top
<OT>
Zitat von @joeyschweiz:
wenn diese Daten aufkäuft crashed die Schnittstelle.

Was mich interessieren würde: Wie käufen denn Daten auf, wie macht man das?

Gruß
</OT>
joeyschweiz
joeyschweiz 11.04.2011 um 09:48:23 Uhr
Goto Top
Danke soweit.


WIe ich schon geschrieben hatte, verschieben ist sicher sinnvoller.

Datei finden klappt gut. Mit "del" ist diese dann auch gelöscht. Nun möchte ich aber nicht löschen sondern verschieben.


for /f "delims=" %%i in ('findstr /s /m /c:"%SuchString%" "%StartPfad%\%DateiMaske%"') do move c:\transfer\fehler "%%i"


Hier habe ich nun das Problem. Die gefundene Datei soll nach "c:\transfer\fehler" verschoben werden.
Ich geh davon aus, dass zwischen move und Pfad ein Bezug zur Datei fehlt. Aber welcher?


Hintergrund:

Die XML mit dem "ERROR code=" werden nur bei Verbindungsfehlern generiert. Derzeit kommt das ca. 1 mal im Monat vor. Da ich auf Seiten des Servers nichts ändern kann, muss ich mit dem Arbeiten was ich von dort bekomme. Problem, die XML Dateien mit Fehlermeldung unterscheiden sich im Aufbau gegenüber den "richtigen" Daten die verarbeitet werden.

Generell sind somit die Fehlermeldungen nicht wichtig, da diese zusätzlich noch in einer LOG Datei protokolliert werden. Verschieben ist aber sicherlich die bessere Wahl.


Danke nochmals.


PS: käuft heist der Fehlerteufel von läuft, in der Regel sitzt der links auf der Schulter.


Grüäsli
Biber
Biber 11.04.2011 um 10:24:14 Uhr
Goto Top
Moin joeyschweizer,

Zitat von @joeyschweiz:
for /f "delims=" %%i in ('findstr /s /m /c:"%SuchString%" "%StartPfad%\%DateiMaske%"') do move c:\transfer\fehler "%%i"

Hier habe ich nun das Problem. Die gefundene Datei soll nach "c:\transfer\fehler" verschoben werden.
Ich geh davon aus, dass zwischen move und Pfad ein Bezug zur Datei fehlt. Aber welcher?

Schau doch noch mal am CMD-Prompt in die Ausgabe von "move /?"

Eigentlich sollte zuerst das zu verschiebende genannt werden (z. B. das "%%i"), danach die Zieldatei bzw das Ziel-Verzeichnis mit abschliessendem Backslash.

Grüße
Biber
Skyemugen
Skyemugen 11.04.2011 um 11:16:18 Uhr
Goto Top
Aloha ...

empfehle ich dir den Befehl move, den du für das del ersetzt und noch deinen Wunschpfad als Letztes hinzufügst ...

war doch eigentlich unmissverständlich oder?

Entspricht es nicht eigentlich fundamentaler Logik, dass man etwas von A nach B bzw. den Gegenstand A nach B verschiebt oder auch mal kopiert und nicht umgekehrt?

greetz André
joeyschweiz
joeyschweiz 11.04.2011 um 12:43:42 Uhr
Goto Top
Danke habs ... sollte wohl mal länger schlafen am Montag morgen.


for /f "delims=" %%i in ('findstr /s /m /c:"%SuchString%" "%StartPfad%\%DateiMaske%"') do move "%%i" c:\transfer\fehler\


Super Woche wünsche ich.