crusher007
Goto Top

Per Batch bereits importierte Ordner erkennen

Hallo liebe Admin-Gemeinde,
ich komme leider nicht weiter und benötige dringend die Hilfe der Community, ich hoffe sehr dass mir jemand helfen kann und mein Problem versteht face-wink

Also folgendes Scenario:

Es existiert ein Verzeichnis, welches jeden Tag erneut mit Tagesordnern befüllt wird, die abends auf einen anderen Server verschoben werden, z.B.:

2010\
\F0602
\F0604
\F0612

Diese lasse ich mir nun in eine Logdatei (inhalt.txt) schreiben, verschiebe sie anschließend auf den anderen Server und möchte nun am nächsten Tag, dass folgendes von meiner Batch ausgeführt wird:

for /f "tokens=1,2*" %%a(hier:aktuelle Ordner im Verzeichnis -> "F0602,F0604") do "suche %%a in ('inhalt.txt')

Wenn gleicher Ordner in "inhalt.txt" bereits geloggt wurde, dann verschiebe den aktuellen Ordner in "_Achtung" und schicke Mail per Blat.

Leider komme ich mit diesen for-Konstrukten noch nicht so richtig zurecht, so dass ich an der korrekten Ausformulierung scheitere.

Wäre klasse wenn mir jemand helfen könnte und freue mich auf Eure Antworten!

Greets
Crusher007

Content-ID: 145394

Url: https://administrator.de/forum/per-batch-bereits-importierte-ordner-erkennen-145394.html

Ausgedruckt am: 23.12.2024 um 17:12 Uhr

bastla
bastla 22.06.2010 um 14:30:47 Uhr
Goto Top
Hallo Crusher007!

Wenn es um Ordner geht, wäre eigentlich eine "for /d"-Schleife das richtige Werkzeug - ungetestet etwa so:
@echo off & setlocal
set "Basis=D:\2010"  
set "Achtung=D:\_Achtung"  
set "Liste=D:\inhalt.txt"  

for /d %%i in ("%Basis%\*.*") do findstr /c:"%%~nxi" "%Liste%" && (  
    echo move "%%i" "%Achtung%"  
    echo blat ...
)
Falls nicht für jeden Ordner eine Mail erzeugt werden soll, könnte das so aussehen:
@echo off & setlocal
set "Basis=D:\2010"  
set "Achtung=D:\_Achtung"  
set "Liste=D:\inhalt.txt"  

set "Ordner="  
for /d %%i in ("%Basis%\*.*") do findstr /c:"%%~nxi" "%Liste%" && call :ProcessFolder "%%i"  
if defined Ordner echo blat ... %Ordner%
goto :eof

:ProcessFolder
echo move %1 "%Achtung%"  
set "Ordner=%Ordner%%~1 "  
goto :eof
Das "echo" vor dem "move" ist für die Testphase gedacht, und die Zeile für "blat" hast Du ja vermutlich schon fertig (wobei in der zweiten Variante die Ordnerliste zusätzlich in den "body" aufgenommen werden könnte).

Grüße
bastla
Crusher007
Crusher007 24.06.2010 um 09:19:48 Uhr
Goto Top
Moin bastla!

Geile Sache, genau das was ich wollte :D geht 1a!
Hab auch nix anderes von dir erwartet, nachdem was ich schon so von dir hier im Forum gelesen habe ;)
Also besten Dank für die Lösung und weiter so ! ;)

Greets Crusher
bastla
bastla 24.06.2010 um 10:28:29 Uhr
Goto Top
Hallo Crusher007!

Freut mich, dass es passt - und danke für die Blumen ... face-smile

Grüße
bastla
Crusher007
Crusher007 24.06.2010 um 12:03:13 Uhr
Goto Top
Zitat von @bastla:
Hallo Crusher007!

Freut mich, dass es passt - und danke für die Blumen ... face-smile

Grüße
bastla

Hey bastla!
Gern geschehen, hast es dir verdient face-wink

Aber ich hätte da nochmal ne Anschlussfrage:
Ist es auch möglich noch einen weiteren "Unter-Process" einzubauen, indem das Script nicht nur den Ordner prüft sondern ebenfalls die darin enthaltene Datei !?
Sprich: Erst wenn die Datei in dem bereits importierten Ordner ebenfalls genau so mit der Ordnerstruktur (z.B. "F0607\1025421.bld") importiert wurde, dann schicke mir ne Benachrichtigungs-Mail!
Hat das wer verstanden? *g*
Dann würde ich mich riesig über eine weiter Hilfe freuen face-wink
Komm da leider auch wieder, trotz bastla`s Muster, nicht weiter....

Herzlichen Dank,
Greets Crusher
bastla
bastla 24.06.2010 um 20:42:20 Uhr
Goto Top
Hallo Crusher007!

So ganz habe ich's leider tatsächlich nicht verstanden - soll denn geprüft werden, ob der gefundene Ordner (irgend)eine .bld-Datei beinhaltet bzw gibt es auch für die Datei(en) eine Liste zum Vergleich? Wenn nein: nach welchem Kriterium könnte die Datei geprüft werden?

Grüße
bastla
Crusher007
Crusher007 24.06.2010 um 23:10:18 Uhr
Goto Top
Hey bastla, prima das du dich nochmal meldest! Dafür schonmal vielen Dank!

Also im Grunde genommen soll das Script nicht nur die vorliegenden Ordner, sondern die Ordner und die darin befindlichen Dateien mit den in der Liste enthaltenen Ordnern/Dateien abgleichen

In der Liste steht z.B. folgendes:

F0506\102035.bld
F0506\188088.bld
F0622\199910.bld
F1009\653211.bld

und in dem aktuellen Ordner liegen z.b. folgenden Verzeichnisse mit Dateien:

F0506\112135.bld
F0506\199088.bld
F0622\199910.bld <------------- Die Datei wurde bereits importiert und steht daher in der obigen Liste (inhalt.txt)
F1009\6544211.bld

Ich dachte mir das halt so, dass ich in dein Script einfach an der Stelle

for /d %%i in ("%Basis%\*.*") do findstr /c:"%%~nxi" "%Liste%" && call :ProcessFolder "%%i"   

:ProcessFolder 
echo move %1 "%Achtung%"   
set "Ordner=%Ordner%%~1 "   
goto :ProcessFile <---------------- Hier weitere Prüfung auf bereits importierte Datei

eine weitere Abfrage auf die Datei in dem Ordner mache. Erst wenn die enthaltene Dateie(n) in Verbindung mit dem Ordner in der Liste steht, dann schicke die Mail per blat.

Ich hoffe das macht es etwas deutlicher ;)

Schönen Abend noch,
Gruß Crusher
bastla
bastla 25.06.2010 um 07:51:46 Uhr
Goto Top
Hallo Crusher007!

Deine Skizze wirft für mich noch weitere (Verständnis-)Fragen auf:
  • Soll tatsächlich jeder Ordner, der in der Liste aufscheint, auf jeden Fall verschoben werden und
  • soll erst dann auch noch geprüft werden, ob Dateien aus der Liste im Ordner enthalten sind, um erst, wenn auch das zutrifft, eine Mail zu verschicken?

  • Sind die Dateien nur zu melden, oder zusätzlich noch zu "behandeln" (zB verschieben)?

Grüße
bastla