[Batch] Ordner Überwachung auf Dateien und verschieben

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Soji, 30. März 2012 .

  1. 30. März 2012
    Ordner Überwachung auf Dateien und verschieben

    Hey,

    wieder ein problem -

    Situation:
    Wir haben einen Export Ordner in dem AAAA-BB-CC-DD.xls Dateien in folgendem Namensformat gespeichert werden (AAAA-BB-CC-DD) A=AuftragsNr B=KW der Auftragserstellung C=Jahr des Auftrages D=BearbeiterNr
    Nun sollen diese Dateien automatisch in den entsprechenden Ordner in dem richtigen Jahr abgespeichert werden.
    F:\Pruefprotokolle\Prüfprotokolle 2011\0001-02-11-21\0001-02-11-21_Rohdaten
    bzw.
    F:\Pruefprotokolle\Prüfprotokolle 2012\0001-01-12-11\0001-01-12-11_Rohdaten

    Das wären so die Ordnerstrukturen.

    Er muss also aus einem Ordner die Datei einlesen, den Namen trennen um das Jahr für den richtigen Ordner zu bekommen und in diesem Ordner dann nach der gesamten AuftragsNr. suchen und sie dort im Ordner XX_Rohdaten ablegen (wie oben im Beispiel)

    Sollte der Ordner nicht gefunden werden oder unstimmigkeiten geben - keine Aktion durchführen!

    so far,
    Soji
     
  2. 30. März 2012
    AW: Ordner Überwachung auf Dateien und verschieben

    also - mein Ansatz sieht momentan so aus:
    Code:
    for %%a in (*.xls) do (
    if exist "C:\Dokumente und Einstellungen\XY\Desktop\Test-Umgebung\Export\%%~na.xls" move "%%~na.xls" "C:\Dokumente und Einstellungen\XY\Desktop\Test-Umgebung\Pruefprotokolle 2012\%%~na\%%~na_Rohdaten\%%~na.xls"
    if %errorlevel% neq 0 goto escape
    )
    pause
    :escape
    exit
    
    /e hab den aktuellen ansatz genommen, wie kann ich das %%~na_Rohdaten richtig interpretieren lassen, sprich %%~na für den filenamen _Rohdaten als dahinterstehender Text?
    Problem - ich bekomm es nicht in den entsprechenden unterordner, es ist nur für ein Jahr (sprich für 2011 & 2012 müsste ich 2 batch schreiben)

    Hochsprache ist natürlich auch ok, hauptsache es lässt sich ohne Aufwand auf dem PC ausführen von zum größtenteil fachlich nicht versierten Personen...
     
  3. 30. März 2012
    AW: Ordner Überwachung auf Dateien und verschieben

    Ich würde das ganze z.B. mit C# und der FileSystemWatcher Klasse realisieren. Danach kannst du via RegEx oder Stringmanipulation auf ein gültiges Format prüfen und weiter Schritte einleiten.
     
  4. 30. März 2012
    AW: Ordner Überwachung auf Dateien und verschieben

    hast du da evtl. ein kleines beispiel für mich an dem ich mich langhangeln könnte? so tiefgreifende Programmierkenntnisse hab ich leider nicht in dem Bereich
     
  5. 30. März 2012
    AW: Ordner Überwachung auf Dateien und verschieben

    Ich selber habe noch nie mit der FileSystemWatcher klasse gearbeitet. Zum glück gibts ein schönes Beispiel dazu in der MSDN: FileSystemWatcher-Klasse (System.IO)
    Das ganze geht natürlich nur, wenn der "Export Ordner" wirklich nur zum export und nicht als Arbeitsordner genutzt wird. Du musste den Filter/Ordner anpassen und beim Event handling (OnChanged bzw. OnRenamed) die geänderte Datei auf Gültigkeit prüfen und ggf. verschieben.
     
  6. 30. März 2012
    AW: Ordner Überwachung auf Dateien und verschieben

    hab das ganze nun soweit
    Code:
    @echo off & SETLOCAL ENABLEDELAYEDEXPANSION
    SET "export_path=C:\Dokumente und Einstellungen\XY\Desktop\Test-Umgebung\Export"
    SET "import_path=C:\Dokumente und Einstellungen\XY\Desktop\Test-Umgebung\Pruefprotokolle 2012"
    for %%a in (*.xls) do (
    SET "file=%%~na"
    if not exist "%import_path%\!file!\" GOTO next
    if exist "%import_path%\!file!\!file!_Rohdaten\" GOTO vorhanden
    if not exist "%import_path%\!file!\!file!_Rohdaten\" mkdir "%import_path%\!file!\!file!_Rohdaten\"
    :vorhanden
    if exist "%export_path%\!file!.xls" move "!file!.xls" "%import_path%\!file!\!file!_Rohdaten\!file!.xls"
    if %errorlevel% neq 0 goto escape
    :next
    )
    cls
    :escape
    exit
    
    er schiebt mir alles in die richtigen ordner, bei dem fehlenden Unterordner XY_Rohdaten erstellt er diesen, wenn der gesamte Ordner fehlt soll er nichts machen und mit der nächsten datei weitermachen...
    Leider macht das Programm dies aber nicht, er kopiert vlt. 1 Datei und beendet anstatt alle die möglich sind auch zu verschieben...

    wie bekomme ich den sprung zum nächsten "for" element, er soll die nicht möglichen dateien also einfach nur überspringen

    /e - ich bevorzuge dann doch eher batch ist für mich etwas einfacher zu handhaben
     
  7. 30. März 2012
    AW: Ordner Überwachung auf Dateien und verschieben

    Wäre Bash (+ Standard-Tools) für Windows, oder die PowerShell Alternativen ?
    An sich ist dein Vorhaben nicht schwer, nur wird das ganze in Batch sehr "kryptisch".

    Kleiner Tipp am Rande:

    Batch kann Klammern, auch bei if.

    Code:
     if not exists "%import_path%" (
    
     )
    
    An das Jahr (falls dass momentan das Problem ist, kommst du Folgendermaßen:
    Code:
     for /f "tokens=1-4 delims=-" %%b in ("%%~na") do (
     echo Jahr, Kurzform: %%d
     echo Jahr, lange Form: 20%%d
     )
    
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.