msblaster32
Goto Top

Textdatei mit bestimmtem Inhalt verschieben

Hallo Community, ich bin mal wieder auf der Suche nach einer Antwort zur einer Frage die eigentlich ganz einfach ist, irgendwie jedoch nicht. Ich möchte eine Textdatei auslesen und auf Grund Ihres Inhalts dann eine Aktion(z.B. Verschieben) durchführen.

Die Textdatei hat die Endung *.test und ist im normalen Zeichenformat codiert. Ich suche einen Befehl der in die Datei schaut und dann auf Grund eines bestimmten Wortes, welches sich innerhalb der Datei befindet, diese dann in einen entsprechenden Ordner kopiert. Z.B. taucht in der 3. Zeile stets eine Mailadresse auf. Abhängig von dieser würde ich die Datei dann gerne in einen definierten Ordner verschieben lassen.

Ist sowas mit ein paar einfachen Befehlen möglich? Ich habe schon mit robocopy, xcopy und find rumprobiert, aber das führt alles irgendwie nicht zum Ziel.

Über kompetente Hilfe bin ich im Voraus sehr dankbar... face-smile
Kommentar vom Moderator Biber am 22.02.2010 um 17:11:18 Uhr
Warum passiert es immer montachs....?
Über kompetente Hilfe bin ich im Voraus sehr dankbar..
...dass so nette junge Menschen über Hilfe dankbar sind und sich für jede Antwort freuen....*seufz*...

Content-ID: 136579

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

Snowman25
Snowman25 22.02.2010 um 16:58:43 Uhr
Goto Top
type abc.test|findstr a@b.de
if %ERRORLEVEL%==0 move abc.test D:\aatb
so in etwa?
pete.dawgg
pete.dawgg 22.02.2010 um 17:02:56 Uhr
Goto Top
installier die die gnu-tools. dann
if [ `grep -q SUCHWORT FILE.TEST; echo $?` -eq 0 ]; then mv FILE.TEST ZIEL; fi
(so in etwa, vorbehaltlich Tippfehlern)
Snowman25
Snowman25 22.02.2010 um 19:22:43 Uhr
Goto Top
Zitat von @pete.dawgg:
installier die die gnu-tools

Also bitte...
Wenn die Aufgabe nicht mit Bordmitteln zu lösen ist, dann wöre das vllt. angebracht.
Allerdings ist das Problem locker mit Bordmitteln zu schaffen, da brauch ich nichts externes

Gruß
Snow
msblaster32
msblaster32 23.02.2010 um 09:58:02 Uhr
Goto Top
Hallo und danke erstmal für die Antworten! face-smile


geht leider noch nicht so ganz, er durchsucht alle Dateien und da der Begriff in einer der Dateien gefunden wurde, gibts anscheinend immer automatisch den errorlevel 1, somit werden dann im Anschluss auch die Dateien kopiert, in welchen die Mailadresse gar nicht drinn steht...

so sieht es derzeitig aus:
type *.test|findstr /R %adressen_test%
if %ERRORLEVEL%==0 copy *.test %pfad_test%
if not move *.test %pfad_test1%

hat jemand einen Tipp? Ich möchte halt in der Variable %adressen_test% festlegen, für welche Mails der Kopiervorgang gilt, wenn eine Adresse in der Datei steht, die unbekannt ist, soll die Datei in einen anderen Ordner verschoben werden.
Snowman25
Snowman25 23.02.2010 um 10:17:26 Uhr
Goto Top
If not move???
sowas gibts nicht!
type *.test|findstr /R %adressen_test%
if %ERRORLEVEL%==0 (
	copy *.test %pfad_test%
) else (
	move *.test %pfad_test1%
)
So würde das schon eher funktionieren
msblaster32
msblaster32 23.02.2010 um 10:41:44 Uhr
Goto Top
hatte das mal irgendwo gelesen, dass man nach einem if mit "if not" weiterarbeiten kann,

habe den Code jetzt entsprechend angepasst mit dem selben Ergebnis wie vorher, es werden nach wie vor, ausnahmslos alle Dateien kopiert, egal ob die Mailadresse drinn steht oder nicht.

habe testweise eine leere datei mit der endung.test erstellt, wir kopiert obwohl nichts drinn steht, fast so, als hätte findstr überhaupt keine funktion
Snowman25
Snowman25 23.02.2010 um 16:52:13 Uhr
Goto Top
stimmt deine Variable %adressen_test% denn auch? Woher kommt das /R? Das gehört nicht in den Befehl rein.
mit copy *.test wählst du alle dateien aus, die die Endung .test haben. Logischerweise wird dann auch die Leere kopiert, wenn er einmal deine mailadresse findet.
machs mit ner for-schleife. face-wink

Gruß
Snow
msblaster32
msblaster32 24.02.2010 um 09:24:58 Uhr
Goto Top
das /r hatte ich testweise eingefügt da ich vermutete, das er sonst auch nach leerzeichen sucht bzw einzelnen worten in der variable %adressen_test%

Wie du schon richtig schreibst, liegt das Problem daran, dass die leeren Dateien auch kopiert werden da in einer der Dateien die Mailadresse gefunden wurde.

Könntest du mir ein paar Tipps geben, wie man nach einander alle Dateien durcharbeiten lassen und dann entsprechend verarbeiten kann? So versteh ich jetzt grad den Sinn der for-Schleife!?

Danke trotzdem nochmal für die bisherige Hilfe face-smile
Snowman25
Snowman25 24.02.2010 um 11:09:30 Uhr
Goto Top
hallo @msblaster32,

Lies dir einfach mal die Hilfe zur For-schleife durch (for /?)
Ich dachte da an etwas wie:
for %%I in (*.test) do (
	type %%I | findstr %adressen_test%
	if %ERRORLEVEL%==0 (
		copy %%I %pfad_test%
	) else (
		move %%I %pfad_neu%
	)
)
UNGETESTET

Gruß
Snow
msblaster32
msblaster32 25.02.2010 um 15:24:01 Uhr
Goto Top
moin, funktioniert leider überhaupt nicht, sagt immer das %%I syntaktisch nicht verarbeitbar ist, kopiert aber die Dateien welche eigentlich verschoben werden sollen. Habe leider nicht so viel Ahnung von for-Schleifen und Batchprogrammierung.

MfG
Snowman25
Snowman25 25.02.2010 um 16:53:27 Uhr
Goto Top
Zitat von @msblaster32:
sagt immer das %%I syntaktisch nicht verarbeitbar ist

Du musst das ganze natürlich als Batch-Datei ablaufen lassen.
Wenn du es direkt am Prompt eingibst, dann mit nur einem %-Zeichen