dielomat3000
Goto Top

Änderung eines Scripts.Dateien automatisch verschieben.

Ich habe aus mir dem Internet ein Script gezogen, mit dem ich Dateien automatisch verschieben lassen kann. Jedoch habe ich überhaupt keine Ahnung davon.
Das Programm ist soweit eigentlich in Ordung.Nur ein Fehler tritt auf. Das Programm legt mir für die Dateien neue Ordner an. Das will ich aber nicht. Es soll schon vorhandene Ordner nehmen und die Dateien in den richtigen Ordner verschieben. So soll z.B. die Datei "71259-2010-785-R51654645" in den Ordner "71259-Musterfirma". Wie ihr seht sind die ersten 5 Zahlen die gleichen. Bei den Dateien handelt es sich um pdf. Schlecht wäre es außerdem nicht wenn die Datei nicht nur in den Ordner "71259-Musterfirma", sondern dort in den Unterordner "2010"(also die zweite Zahl der Datei) verschoben wird, der aber auch schon vorhanden ist. Falls mal ein Ordner nicht vorhanden sein sollte, wäre es gut wenn man eine Nachricht bekommt, damit man ihn manuell hinzufügen kann.Hoffe ihr könnt mir helfen. Anbei das schon vorhandene Script.

' Filemover
Const Trenner = "-"
Dim oFSO, Datei, file, Ordner
Dim trennposition, newfolder

Set oFSO = CreateObject("scripting.filesystemobject")
Set folder = oFSO.GetFolder(GetMyPath)

For each Datei In folder.Files
If Right(Datei, 3) = "vbs" Then
Else
If InStr(Datei, Trenner) > 0 then
trennposition = InStr(Datei.name, Trenner) -1
newfolder = Trim(Left((Datei.Name), trennposition))
If Not oFSO.FolderExists(folder & "\" & newfolder) _
Then oFSO.CreateFolder(folder & "\" & newfolder)
Move_File Datei.Name, folder & "\" _
& newfolder & "\"
End If
End If
Next

Set folder = Nothing
Set oFSO = Nothing

MsgBox "Fertig!"

Function GetMyPath()
Dim FSO, Fldr
Set FSO = CreateObject("scripting.filesystemobject")
Set Fldr = FSO.GetFolder("./")
GetMyPath = Fldr.Path
Set FSO = Nothing
Set Fldr = Nothing
End Function

Function Move_File(oldname, newname)
Set fs = CreateObject("Scripting.FileSystemObject")
if fs.FileExists(oldname) = True then
fs.MoveFile oldname, newname
end If
Set fs = Nothing
end Function

Content-Key: 138258

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

Printed on: April 19, 2024 at 00:04 o'clock

Mitglied: 60730
60730 Mar 15, 2010 at 14:57:58 (UTC)
Goto Top
Moin und willkommen...
da du neu bist - nehm ich dir das mit der "noch?" fehlenden Grußformel nicht so übel

Das Programm legt mir für die Dateien neue Ordner an. Das will ich aber nicht.

Dazu mal den Block
If Not oFSO.FolderExists(folder & "\" & newfolder) _
Then oFSO.CreateFolder(folder & "\" & newfolder)
Move_File Datei.Name, folder & "\" _
& newfolder & "\"

genau analysieren - du kommst ganz sicher selber drauf, was es mit "newfolder" auf sich hat.

Ps: "Progrämmchen und Schnippsel passen am besten in <code> Blöcke - siehe Formatierungshilfe.

ruß
Member: DielomaT3000
DielomaT3000 Mar 15, 2010 at 15:05:59 (UTC)
Goto Top
Servus,
hab mir schon gedacht dass es was mit dem newfolder zu tun hat.
Aber wie gesagt, ich hab null Ahnung was ich da jetzt ändern muss und so weiter...
Member: Biber
Biber Mar 15, 2010 at 15:18:04 (UTC)
Goto Top
Moin DielomaT3000,

willkommen im Forum.

Zitat von @DielomaT3000:
Aber wie gesagt, ich hab null Ahnung was ich da jetzt ändern muss und so weiter...
Okay...

Welche Strategien möchtest du denn einer eingehenderen Prüfung hinsichtlich der potentiellen Eignung zur Änderung dieses untragbaren Zustands unterziehen?
Und wie können wir dich dabei unterstützen/motivieren?

"ich habe null Ahnung" ist ja keine Lösungsstrategie im engeren, nicht-neoliberalen Sinne.

Grüße
Biber
Mitglied: 76109
76109 Mar 15, 2010 at 16:33:34 (UTC)
Goto Top
Hallo DielomaT3000!

Code wegen Missgefallens wieder entferntface-wink

Gruß Dieter
Member: Biber
Biber Mar 15, 2010 at 17:11:24 (UTC)
Goto Top
Ja nee, didi1954,

ich denke, du gehst vollkommen zu Recht davon aus, dass deine Kommentare, konstruktiven Lösungsansätze und deine sauber strukturierten Codeschnipsel hier im Forum von allen Mitskriptern hoch geschätzt werden.

In diesem konkreten Fall allerdings bin ich nicht so ganz angetan davon.

Wenn die Ausgangsposition des Fragestellers war
  • "ich hab im Netz einen Skriptschnipsel kopiert, den ich zwar nicht verstehe, weil ich keine Ahnung von VBS habe,
  • der auch absolut keine einzige Kommentarzeile enthält oder auch nur eine Andeutung, welches Problem er zu lösen bestrebt ist
  • der aber zu gut 68% etwas zu machen scheint, was ich auch irgendwie gebrauchen könnte -
  • kann jemand mal eben die restlichen 32% dranflanschen büdde?"

... und jetzt, zwei Stunden später ist dank dir der neue Zustand aus Sicht des Fragestellers
  • "ich hab von administrator.de einen Skriptschnipsel kopiert, den ich zwar nicht verstehe, weil ich keine Ahnung von VBS habe,
  • der auch absolut keine einzige Kommentarzeile enthält oder auch nur eine Andeutung, welches Problem er zu lösen bestrebt ist
  • der aber zu gut 88% etwas zu machen scheint, was ich auch irgendwie gebrauchen könnte -
  • ach, die fehlenden 12% kann ich auch weglassen.."

dann kann der Beitrag doch unabhängig von einem Grünen Haken sofort auf den Kompost.

Denn das sind doch wirklich TK-Fischstäbchen ohne angegebenes Mindesthaltbarkeitsdatum statt eine Angel für den Newbie.
Es gibt keinen Anlass mehr für ihn, sich mit der Thematik auseinanderzusetzen und (fairerweise angemerkt) auch keinen Anhaltspunkt zu Orientierung in dem Schnipsel.
Der Schnipsel ist natürlich aus Sicht eines gestandenden Skripters wohl strukturiert, übersichtlich und selbst erklärend...
Aus Sicht eines "ich hab null Ahnung von VBS"-Einsteigers könnte er aber genausogut auf Kisuaheli getippselt sein.

Ich fand in diesem Beitrag T-Mos forderndes "Vom Zugucken lernst du nix - nimm mal den newfolder in die Hand"-Statement wirklich sinnvoller.
Diese individuell angepassten Skripte müssen doch gepflegt, gewartet und eben auch verstanden werden .... wir kloppen hier doch keine Das-ist-mein-Laden-Handys raus, die halt nur irgendwie ein Jahr lang piepen und rumvibribrieren müssen bis zum nächsten Hype-Modell.

Dann pfleg bitte wenigstens ein paar Kommentarzeilen nach, damit der TO ahnt, wie ein Skript aussehen könnte.

Grüße
Biber
Mitglied: 76109
76109 Mar 15, 2010 at 17:57:39 (UTC)
Goto Top
Hallo Biber!

Du hast natürlich, wie meistens, im Grunde genommen Rechtface-wink

Ich dachte, weil der alte Code nicht darauf ausgelegt ist, die Anforderung vom TO zu erfüllen, schreibe ich am besten einen neuen Code. Und stimmt, mit dem auskommentieren hab ich's auch nicht so. Muss ich wohl noch daran arbeitenface-wink

Gruß Dieter
Member: DielomaT3000
DielomaT3000 Mar 16, 2010 at 16:06:15 (UTC)
Goto Top
Hallo Leute,

hätte ich vorher gewusst, dass meine Anfrage hier so auf Missgefallen stößt, hätte ich es wahrscheinlich vorgezogen den Beitrag nicht hier rein zu stellen.

Da mir dieses Programm ziemlich viel Arbeit abgenommen hätte, hab ich gedacht dass ich mal jemanden frag der möglicherweise Ahnung davon hat. In dem Fall wart ihr das.

Tipps oder halbherzige Anweisungen (auch wenn sie noch so gut gemeint sind) helfen mir nicht weiter da ich wie schon gesagt ein Laie auf diesem Gebiet bin.
Bevor ich ein solches Programm selber korrigieren kann, geschweige denn selbst schreiben kann, werde ich es persönlich wahrscheinlich nicht mehr brauchen.

Deswegen dachte ich hier jemanden zu finden, dem ein solches Script leicht von der Hand geht und nur drüber lesen muss um das Problem zu erkennen und eventuell zu lösen.

Vielen Dank für eure Hilfe
Member: Biber
Biber Mar 16, 2010 at 16:30:10 (UTC)
Goto Top
Moin DielomaT3000,

ich hatte gestern schon befürchtet, dass die von mir (wenn auch unbeabsichtigt) Heiss-Kalt-Wechselbäder in diesem Beitrag für Irritationen sorgen.
Ich versuchs noch mal.
Bevor ich ein solches Programm selber korrigieren kann, geschweige denn selbst schreiben kann, werde ich es persönlich wahrscheinlich nicht mehr brauchen.
Das ist, mit Verlaub gesagt, ein bisschen zu einfach und zu durchsichtig.
Selbst wenn du schon während des Besuchs der 3.Schulklasse wegen unerlaubten Klebstoffschnüffelns von der Schule geflogen wärest.

Niemand -inklusive dir selbst- kann und würde unterstellen, dass du nicht willens oder in der Lage dazu bist, einen 20-Zeilen-Schnipsel verstehen zu können.
Wenn wir hier im Forum allerdings nicht dazu in der Lage sind, dir diese 20 Zeilen verständlich zu machen...
... wenn wir es nur schaffen, dir irgendeine Blackbox vor die Tür zu legen nur mit drei Aufklebern drauf ("Copy & Paste auf den Desktop", "Kommentare nur in der Kauf-Version", "Einfach doppelklicken"), dann haben wir und nicht du das Ziel verfehlt.

Und ganz schräg wird es halt, wenn wir auch nur kosmetische Änderungen an einer Blackbox, die zum Bananenschälen gebaut wurde, vornehmen sollen, damit du mit der modifizierten Blackbox dann die Profiltiefe von Rikschas prüfen kannst.

Vorschlag zu Güte:
Da in der Fastenzeit ohnehin beleidigte Leberwürste nicht angemessen sind: setz bitte nach kurzer, intensiver Schmollphase nochmal bei T-Mos Kommentar auf, dann machen wir gerne konstruktiv weiter.

Grüße
Biber
Member: DielomaT3000
DielomaT3000 Mar 17, 2010 at 07:22:36 (UTC)
Goto Top
Guten Morgen,

nachdem ich die, mir empfohlene, Schmollphase nun beendet habe, wäre ich hocherfreut wenn ihr mir helfen könntet aus meinem obigen Problem eine respektable Lösung hervorzubringen...

Bin für jeden Vorschlag sehr dankbar.
Mitglied: 76109
76109 Mar 17, 2010 at 09:22:06 (UTC)
Goto Top
Hallo DielomaT3000!

Zitat von @DielomaT3000:
nachdem ich die, mir empfohlene, Schmollphase nun beendet habe, wäre ich hocherfreut wenn ihr mir helfen könntet aus
meinem obigen Problem eine respektable Lösung hervorzubringen...

Bin für jeden Vorschlag sehr dankbar.
Na, dann hoffen wir mal, dass der nachfolgende Code wieder etwas Licht in das Dunkel bringtface-wink

Funktion:
Dateien im Pfad "FilePath" nach "MovePath" verschieben. Wenn der Ordner noch nicht existiert, wird eine Meldung ausgegeben und die Datei übersprungen.

Beispiel:
Die Datei "FilePath\12345-6789-0123-XY.txt" wird in den Ordner "MovePath\12345-*\6789\" verschoben, sofern dieser existiert.

Den Quellcode in einen Text-Editor kopieren, die Konstanten (Const..) entsprechend anpassen und unter *.vbs abspeichern:
Option Explicit

Const FilePath = "E:\Test"  
Const MovePath = "E:\Test\Move"  

Const FileType = "txt"  

Const Delim = "-"  

Const Err1 = "Der Ordner FilePath existiert nicht!"  
Const Err2 = "Der Ordner existiert nicht: %1\%2-*\%3"  

Dim Fso, File, Folder, Path, Token, Msg

'Import der Bibliothek für Datei-System-Funktionen  
 Set Fso = CreateObject("Scripting.FileSystemObject")  

'Prüfen ob der Pfad in der Konstanten FilePath existiert  
 If Fso.FolderExists(FilePath) = False Then
    
    'Wenn der Pfad nicht existiert, dann Fehlermeldung ausgeben und Script abbrechen  
     MsgBox Err1, vbExclamation, "Fehler": WScript.Quit  
 End If

'Alle Dateien im Pfad FilePath einlesen  
 For Each File In Fso.GetFolder(FilePath).Files
    
    'Prüften ob die Dateierweiterung FileType entspricht  
     If LCase(Fso.GetExtensionName(File.Name)) = LCase(FileType) Then
        
        'Dateinamen mit dem Trennzeichen Delim in Einzelteile zerlegen  
         Token = Split(Fso.GetBaseName(File.Name), Delim)
        
        'Test ob Dateinamen mindestens 2 Trennzeichen enthält  
         If UBound(Token) >= 1 Then
            
            'Wenn Ja, dann Funktionsaufruf MovePath ermitteln  
             Path = GetPath(Token)
            
            'Prüfen ob der Ordner-Pfad existiert  
             If Path = "" Then  
                
                'Wenn Nein, dann die Meldung mit dem nicht gefundenem Pfad erstellen  
                 Msg = Replace(Replace(Replace(Err2, "%1", MovePath), "%2", Token(0)), "%3", Token(1))  
                
                'Meldung ausgeben  
                 MsgBox Msg, vbInformation, "Meldung"  
             Else
                'Prüfen ob die Datei bereits existiert, gegebenenfalls löschen  
                 If Fso.FileExists(Path & File.Name) Then Fso.DeleteFile Path & File.Name
                
                'Wenn OK, dann Datei verschieben  
                 Fso.MoveFile File, Path             End If
         End If
     End If

'Nächste Datei einlesen  
 Next

 MsgBox "Fertig!"  

Function GetPath(ByRef Token)
    Dim Folder, SubFolder
  
    'Rückgabewert mit Leerstring initialisieren  
    GetPath = ""  
    
    'Alle Ordner im Pfad MovePath einlesen  
    For Each Folder In Fso.GetFolder(MovePath).SubFolders
    
        'Prüfen ob der Ordnername das 1. Token + Trennzeichen enthält  
        If Left(Folder.Name, Len(Token(0)) + 1) = Token(0) & "-" Then  
        
           'Wenn Ja, dann die Unterordner des aktuellen Ordners einlesen  
            For Each SubFolder In Fso.GetFolder(Folder).SubFolders
                
               'Prüfen ob der Unter-Ordnername das 2. Token enthält  
                If Left(SubFolder.Name, Len(Token(1))) = Token(1) Then
                
                   'Wenn Ja, dann Pfad zurückgeben und Schleife beenden  
                    GetPath = SubFolder & "\":  Exit For  
                End If
            
           'Nächsten Unterordner einlesen  
            Next
            
           'Wenn Ordner gefunden, dann Scheife vorzeitig beenden  
            Exit For
        End If
    
   'Nächsten Ordner einlesen  
    Next
End Function

Gruß Dieter

[edit] Codezeile 76-80 geändert. Hatte vergessen, beim schieben von Exit For in die nächste Zeile, ein End If zu setzen [/edit]
[edit] Codezeile 49-50 hinzugefügt. Datei im Zielpfad löschen, falls diese bereits existiert [/edit]
Member: DielomaT3000
DielomaT3000 Mar 17, 2010 at 09:41:17 (UTC)
Goto Top
Hallo Dieter,

ersteinmal vielen Dank dass du dir die Mühe gemacht hast und mir so schnell geantwortet hast.
Habe das Programm mal in einem Testordner ausprobiert und es hat super gelaufen.

Als ich es dann aber im Netzwerk ausprobieren wollte, wurden die vorhandenen Ordner nicht gefunden obwohl sie existieren.
Hat das etwas mit dem Netzwerk/Server zu tun oder liegt das mal wieder an meinem "immensen Wissen" über die Materie VBS?

lg Patrick
Member: DielomaT3000
DielomaT3000 Mar 17, 2010 at 09:55:49 (UTC)
Goto Top
Mir gerade aufgefallen, dass es nicht an dem Netzwerk/ Server liegt sondern daran dass mehrere Unterordner vorhanden sind. So sind zum Beispiel in dem Ordner 71245-Muster die Unterordner 2007, 2008, 2009 und 2010. Dann zeigt er mir den Fehler an dass der Unterordner 2010 nicht existiert.
Wenn nur ein Unterordner vorhanden ist läuft es einwandfrei -> auch im Netzwerk.
Könnte es auch damit was zu tun haben?
Mitglied: 76109
76109 Mar 17, 2010 at 10:20:31 (UTC)
Goto Top
Hallo Patrick!

Also, wieviele Unterordner der Ordner beinhaltet ist eigentlich wurscht, da das Script ja explizit die Unterordner nach dem entsprechendem Namen durchsucht und wenn dieser existiert, dann sollte das Script diesen auch korrekt ermitteln können.

Was jetzt aber die Funktion in einem Netzwerk/Server betrifft, bin ich ehrlich gesagt etwas überfragt und weiß nicht, wie es sich da mit den Zugriffsrechten verhält.... Ich habe leider kein Netzwerk/Server und kann es daher auch nicht ausprobieren etc.face-sad

Vielleicht kann Biber oder Timo mir hierbei netterweise etwas aus der Patsche helfenface-wink

Für die nächsten paar Stunden stehe ich auch leider nicht zur Verfügung. Habe einen wichtigen Termin in der Nähe von Karlsruhe und weiß nicht wie lange das Ganze dauert?

Gruß Dieter
Member: DielomaT3000
DielomaT3000 Mar 17, 2010 at 10:26:27 (UTC)
Goto Top
Naja wie gesagt, es liegt doch nicht am Netzwerk.
Es muss daran liegen dass es mehrere Unterordner sind, da es sehr gut funktioniert wenn nur ein Unterordner vorhanden ist. Sobald es aber mehrere sind findet er den gesuchten Unterordner komischerweise nicht.

Trotzdem vielen Dank!!!

lg Patrick
Mitglied: 76109
76109 Mar 17, 2010 at 11:18:35 (UTC)
Goto Top
Hallo Patrick!

Mhm, nochmal zum besseren Verständnis. Der Dateiname der Datei, die verschoben werden soll, muss mindestens 2 Delimiter (-) enthalten und dann:

Werden alle Ordner im FilePath nach dem Namen des ersten Teils z.B von "12345-6789-Muster.Txt" durchsucht, also 12345-Rest und wenn dieser Ordner gefunden wurde, dann werden die Unterordner dieses Ordners nach dem Namen "6789" durchsucht, also nur "6789" nicht z.B "6789-Irgendwas" sondern nur "6789". Das heiß Das Script findet "..\12345-????\6789" und nicht
z.B. "..\12345-????\6789????"

Noch 12 Minuten, dann muss ich wegface-wink

Gruß Dieter
Member: DielomaT3000
DielomaT3000 Mar 17, 2010 at 12:00:43 (UTC)
Goto Top
Hallo Dieter,

so wie du das erklärst ist das schon richtig und so soll es auch laufen. Tut es aber leider nicht.
Solang nur ein Unterordner vorhanden ist, findet er diesen auch und verschiebt die Datei dorthin. Alles super.
Sobald aber mehrere Unterordner vorhanden sind kommt die Fehlermeldung.

Die Unterordner sind alle nach Jahreszahlen benannt. Also "2010" oder 2009" u.s.w.

Hier mal ein Beispiel, vielleicht weiß dann jemand das Problem:

Die PDF-Datei "71024-2010-60742-20100000449" die in dem Ordner "T:\Ablage\Firma A-B" ist, soll in den Ordner
"T:\Ablage\Firma A-B\71024-Abel Metall\2010" verschoben werden.

Es gibt aber auch manchmal die Ordner: "T:\Ablage\Firma A-B\71024-Abel Metall\2009"
"T:\Ablage\Firma A-B\71024-Abel Metall\2008"
"T:\Ablage\Firma A-B\71024-Abel Metall\2007" und dann funktioniert es nicht.

lg Patrick
Mitglied: 76109
76109 Mar 17, 2010 at 17:03:53 (UTC)
Goto Top
Hallo Patrick!

Sorry, Code oben geändert. Ist mir doch tatsächlich ein Fehler unterlaufen (siehe oben Codezeile 76-80)face-wink

Hatte ursprünglich:
If Left(SubFolder.Name, Len(Token(1))) = Token(1) Then GetPath = SubFolder & "\" :  Exit For  
Dann aber beim kommentieren, dass Exit For in die nächste Zeile geschoben und vergessen ein End If zusetzen:
If Left(SubFolder.Name, Len(Token(1))) = Token(1) Then GetPath = SubFolder & "\"  
Exit For
Dann kann es natürlich nicht funktionierenface-wink

Gruß Dieter
Member: DielomaT3000
DielomaT3000 Mar 17, 2010 at 18:31:50 (UTC)
Goto Top
Hallo Dieter,

also versteh ich das richtig, dass nur das "Exit For" in Zeile 80 verschoben werden muss und das "End If" in Zeile 81?
Oder habe ich dich da jetzt falsch verstanden?

Ich sag dir dann morgen Bescheid ob es funktioniert oder nicht!
Aber schonmal vielen Dank im Voraus.

lg Patrick
Mitglied: 76109
76109 Mar 17, 2010 at 18:46:27 (UTC)
Goto Top
Hallo Patrick!

Das ist wohl ein Missverständnisface-wink Das habe ich schon getan und den Code oben entsprechend geändert.

Mein letzter Kommentar war nur ein Hinweis darauf, was und warum schiefgelaufen warface-wink

Am besten den ganzen Quelltext neu kopieren und die Konstanten nochmal entsprechend anpassen.

Gruß Dieter
Member: DielomaT3000
DielomaT3000 Mar 18, 2010 at 07:02:12 (UTC)
Goto Top
Guten Morgen Dieter,

hab das Script gerde ausprobiert. Und jetzt läuft es super. Vielen Dank!

Nur eine Sache ist mir aufgefallen:

Wenn das Programm eine Datei verschieben will die schon im Zielordner vorhanden ist, erscheint eine Fehlermeldung und das Programm bricht ab. Könnte man das noch so umändern dass das Programm dann einfach eine von den doppelt vorhandenen Dateien löscht?

Und die Nachricht das der Zielordner nicht existiert hat sich als ziemlich nervig erwiesen, da man so ja ständig auf OK klicken muss um fortfahren zu können.

Ansonsten arbeitet das Programm nun genau so wie ich es mir vorgestellt hab.

VIELEN DANK!

lg Patrick
Mitglied: 76109
76109 Mar 18, 2010 at 08:39:19 (UTC)
Goto Top
Guten Morgen Patrick!

Zitat von @DielomaT3000:
Wenn das Programm eine Datei verschieben will die schon im Zielordner vorhanden ist, erscheint eine Fehlermeldung und das Programm
bricht ab. Könnte man das noch so umändern dass das Programm dann einfach eine von den doppelt vorhandenen Dateien
löscht?
Code oben geändert. Die Datei im Zielordner wird gelöscht, falls diese bereits existiert (Codezeile 49-50)
Und die Nachricht das der Zielordner nicht existiert hat sich als ziemlich nervig erwiesen, da man so ja ständig auf OK
klicken muss um fortfahren zu können.
Du wolltest ja einen Hinweis, falls ein Zielordner noch nicht existiert. Und was soll statt dessen passieren? Zielordner erstellen?

Gruß Dieter
Member: DielomaT3000
DielomaT3000 Mar 18, 2010 at 09:27:28 (UTC)
Goto Top
Hallo Dieter,

das die Datei jetzt gelöscht wird ist schonmal super! Danke!

Ja ich wollte einen Hinweis, dieser hat sich aber als ziemlich nervig erwiesen aber ohne ist auch irgendwie suboptimal.
Ist aber auch nicht weiter schlimm solange das Programm im Hintergrund weiter arbeitet und nicht solange wartet bis man auf OK geklickt hat.

Eigentlich würde eine einzige Nachricht am Ende des Prozesses auch reichen, in dem dann alle Dateien stehen die nicht verschoben werden konnten.

Das mit dem Zielordner erstellen geht ja nicht wirklich, weil :

1. Manchmal der Hauptordner erst erstellt werden muss und dieser nicht nur die erste Zahl der Datei enthalten muss, sondern auch einen Namen.(zb. 74512-Muster)
2. Manchmal zwar der Hauptordner vorhanden ist, aber die Unterordner nicht. Also die Zweite Zahl (das Jahr).
3. Wenn der Hauptordner fehlt, müssen Haupt -und Unterordner erstellt werden.

lg Patrick
Mitglied: 76109
76109 Mar 18, 2010 at 09:39:30 (UTC)
Goto Top
Hallo Patrick!

Zitat von @DielomaT3000:
Ja ich wollte einen Hinweis, dieser hat sich aber als ziemlich nervig erwiesen aber ohne ist auch irgendwie suboptimal.
Ist aber auch nicht weiter schlimm solange das Programm im Hintergrund weiter arbeitet und nicht solange wartet bis man auf OK
geklickt hat.

Eigentlich würde eine einzige Nachricht am Ende des Prozesses auch reichen, in dem dann alle Dateien stehen die nicht
verschoben werden konnten.
In dem Fall ist es sinnvoller eine Log-Datei im Ordner FilePath zu erstellen (Füge ich noch ein und geb Bescheid)
Das mit dem Zielordner erstellen geht ja nicht wirklich, weil :

1. Manchmal der Hauptordner erst erstellt werden muss und dieser nicht nur die erste Zahl der Datei enthalten muss, sondern auch
einen Namen.(zb. 74512-Muster)
2. Manchmal zwar der Hauptordner vorhanden ist, aber die Unterordner nicht. Also die Zweite Zahl (das Jahr).
3. Wenn der Hauptordner fehlt, müssen Haupt -und Unterordner erstellt werden.
Stimmt, dass würde nur beim Erstellen des Unterordners funktionieren mit dem Hauptordner geht's natürlich nicht

Gruß Dieter
Member: DielomaT3000
DielomaT3000 Mar 18, 2010 at 09:56:41 (UTC)
Goto Top
Hallo,

also wenn nur der Unterordner fehlt, wäre es nicht schlecht wenn er diesen erstellt.

Wenn natürlich der Hauptordner fehlt, soll er dann einfach am Ende so wie du gesagt hast eine Nachricht mit den Betreffenden anzeigen.

lg Patrick
Mitglied: 76109
76109 Mar 18, 2010 at 11:56:16 (UTC)
Goto Top
Hallo Patrick!

So, ich denke das Script ist jetzt komplettface-wink

Die Unterordner werden automatisch erstellt, wenn der Hauptordner existiert und am Ende wird die Log-Datei im Notepad-Editor angezeigt.

Option Explicit

Const LogFile = "Move.Log"  
Const FilePath = "E:\Threads\138258\Test"  
Const MovePath = "E:\Threads\138258\Test\Move"  

Const FileType = "txt"  

Const Delim = "-"  

Const Err1 = "Der Ordner FilePath existiert nicht!"  
Const Err2 = "Folgende Ordner existieren nicht:"  

Dim Shell, Fso, File, Folder, Path, Token, Log, LogPath

'Import der Bibliothek für Datei-System-Funktionen  
 Set Fso = CreateObject("Scripting.FileSystemObject")  

'Import der Bibliothek für Shell-Funktionen  
 Set Shell = CreateObject("WScript.Shell")  

'Prüfen ob der Pfad in der Konstanten FilePath existiert  
 If Fso.FolderExists(FilePath) = False Then
    
    'Wenn der Pfad nicht existiert, dann Fehlermeldung ausgeben und Script abbrechen  
     MsgBox Err1, vbExclamation, "Fehler": WScript.Quit  
 End If

'Variable mit dem Pfad der Log-Datei  
 LogPath = FilePath & "\" & LogFile  

'Log-Datei erstellen  
 Set Log = Fso.CreateTextFile(LogPath)

'Text mit aktuellem Datum und Zeit in Log-Datei schreiben  
 Log.WriteLine "Erstellt: " & Now & vbCrLf & vbCrLf & Err2  

'Alle Dateien im Pfad FilePath einlesen  
 For Each File In Fso.GetFolder(FilePath).Files
    
    'Prüften ob die Dateierweiterung FileType entspricht  
     If LCase(Fso.GetExtensionName(File.Name)) = LCase(FileType) Then
        
        'Dateinamen mit dem Trennzeichen Delim in Einzelteile zerlegen  
         Token = Split(Fso.GetBaseName(File.Name), Delim)
        
        'Test ob Dateinamen mindestens 2 Trennzeichen enthält  
         If UBound(Token) >= 1 Then
            
            'Wenn Ja, dann Funktionsaufruf MovePath ermitteln  
             Path = GetPath(Token) & "\"  
            
            'Prüfen ob der Ordner-Pfad existiert  
             If Path = "\" Then  
                
                'Wenn Nein, dann fehlenden Pfad in Log-Datei schreiben  
                 Log.WriteLine MovePath & "\" & Token(0) & "-*\" & Token(1)  
             Else
                'Prüfen ob die Datei bereits existiert, gegebenenfalls löschen  
                 If Fso.FileExists(Path & File.Name) Then Fso.DeleteFile Path & File.Name
                
                'Wenn OK, dann Datei verschieben  
                 Fso.MoveFile File, Path
             End If
         End If
     End If

'Nächste Datei einlesen  
 Next

'Log-Datei schließen  
 Log.Close

'Log-Datei im Notpad-Editor anzeigen  
 Shell.Run "Notepad " & """" & LogPath & """"  

Function GetPath(ByRef Token)
    Dim Folder, SubFolder
  
    'Rückgabewert mit Leerstring initialisieren  
    GetPath = ""  
    
    'Alle Ordner im Pfad MovePath einlesen  
    For Each Folder In Fso.GetFolder(MovePath).SubFolders
    
        'Prüfen ob der Ordnername das 1. Token + Trennzeichen enthält  
        If Left(Folder.Name, Len(Token(0)) + 1) = Token(0) & "-" Then  
        
           'Wenn Ja, dann die Unterordner des aktuellen Ordners einlesen  
            For Each SubFolder In Fso.GetFolder(Folder).SubFolders
                
               'Prüfen ob der Unter-Ordnername das 2. Token enthält  
                If Left(SubFolder.Name, Len(Token(1))) = Token(1) Then
                
                   'Wenn Ja, dann Pfad zurückgeben und Schleife beenden  
                    GetPath = SubFolder:  Exit For
                End If
            
           'Nächsten Unterordner einlesen  
            Next
            
           'Prüfen ob Unterordner gefunden wurde. Wenn Nein Unterordner erstellen  
            If GetPath = "" Then GetPath = Fso.CreateFolder(Folder & "\" & Token(1))  
           
           'Wenn Haupt-Ordner gefunden, dann Scheife vorzeitig beenden  
            Exit For
        End If
    
   'Nächsten Ordner einlesen  
    Next
End Function

Gruß Dieter
Member: DielomaT3000
DielomaT3000 Mar 18, 2010 at 12:09:53 (UTC)
Goto Top
Hallo Dieter,

jetzt funktioniert ALLES 100%ig. Genau so wie ich es mir vorgestellt habe.
Du glaubst gar nicht wie sehr du mir damit geholfen hast!

Vielen, vielen Dank!

lg Patrick
Mitglied: 76109
76109 Mar 18, 2010 at 12:23:46 (UTC)
Goto Top
Hallo Patrick!

Zitat von @DielomaT3000:
jetzt funktioniert ALLES 100%ig. Genau so wie ich es mir vorgestellt habe.
Gottseidankface-smile
Du glaubst gar nicht wie sehr du mir damit geholfen hast!
Ich versuche es mir vorzustellen!
Vielen, vielen Dank!
Yepp, gern geschehenface-wink

Gruß Dieter