Ä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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 138258
Url: https://administrator.de/forum/aenderung-eines-scripts-dateien-automatisch-verschieben-138258.html
Ausgedruckt am: 23.04.2025 um 02:04 Uhr
27 Kommentare
Neuester Kommentar

Moin und willkommen...
da du neu bist - nehm ich dir das mit der "noch?" fehlenden Grußformel nicht so übel
Dazu mal den Block
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ß
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 & "\"
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ß
Moin DielomaT3000,
willkommen im Forum.
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
willkommen im Forum.
Zitat von @DielomaT3000:
Aber wie gesagt, ich hab null Ahnung was ich da jetzt ändern muss und so weiter...
Okay...Aber wie gesagt, ich hab null Ahnung was ich da jetzt ändern muss und so weiter...
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

Hallo DielomaT3000!
Code wegen Missgefallens wieder entfernt
Gruß Dieter
Code wegen Missgefallens wieder entfernt
Gruß Dieter
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
... und jetzt, zwei Stunden später ist dank dir der neue Zustand aus Sicht des Fragestellers
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
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

Hallo Biber!
Du hast natürlich, wie meistens, im Grunde genommen Recht
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 arbeiten
Gruß Dieter
Du hast natürlich, wie meistens, im Grunde genommen Recht
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 arbeiten
Gruß Dieter
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.
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
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

Hallo DielomaT3000!

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:
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]
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 bringtnachdem 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.
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]

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.
Vielleicht kann Biber oder Timo mir hierbei netterweise etwas aus der Patsche helfen
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
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.
Vielleicht kann Biber oder Timo mir hierbei netterweise etwas aus der Patsche helfen
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

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 weg
Gruß Dieter
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 weg
Gruß Dieter

Hallo Patrick!
Sorry, Code oben geändert. Ist mir doch tatsächlich ein Fehler unterlaufen (siehe oben Codezeile 76-80)
Hatte ursprünglich:
Dann aber beim kommentieren, dass Exit For in die nächste Zeile geschoben und vergessen ein End If zusetzen:
Dann kann es natürlich nicht funktionieren
Gruß Dieter
Sorry, Code oben geändert. Ist mir doch tatsächlich ein Fehler unterlaufen (siehe oben Codezeile 76-80)
Hatte ursprünglich:
If Left(SubFolder.Name, Len(Token(1))) = Token(1) Then GetPath = SubFolder & "\" : Exit For
If Left(SubFolder.Name, Len(Token(1))) = Token(1) Then GetPath = SubFolder & "\"
Exit For
Gruß Dieter

Hallo Patrick!
Das ist wohl ein Missverständnis
Das habe ich schon getan und den Code oben entsprechend geändert.
Mein letzter Kommentar war nur ein Hinweis darauf, was und warum schiefgelaufen war
Am besten den ganzen Quelltext neu kopieren und die Konstanten nochmal entsprechend anpassen.
Gruß Dieter
Das ist wohl ein Missverständnis
Mein letzter Kommentar war nur ein Hinweis darauf, was und warum schiefgelaufen war
Am besten den ganzen Quelltext neu kopieren und die Konstanten nochmal entsprechend anpassen.
Gruß Dieter

Guten Morgen Patrick!
Gruß Dieter
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)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.
Du wolltest ja einen Hinweis, falls ein Zielordner noch nicht existiert. Und was soll statt dessen passieren? Zielordner erstellen?klicken muss um fortfahren zu können.
Gruß Dieter

Hallo Patrick!
Gruß Dieter
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)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.
Stimmt, dass würde nur beim Erstellen des Unterordners funktionieren mit dem Hauptordner geht's natürlich nicht1. 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.
Gruß Dieter

Hallo Patrick!
So, ich denke das Script ist jetzt komplett
Die Unterordner werden automatisch erstellt, wenn der Hauptordner existiert und am Ende wird die Log-Datei im Notepad-Editor angezeigt.
Gruß Dieter
So, ich denke das Script ist jetzt komplett
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

Hallo Patrick!
Gottseidank

Gruß Dieter
Gottseidank
Du glaubst gar nicht wie sehr du mir damit geholfen hast!
Ich versuche es mir vorzustellen!Vielen, vielen Dank!
Yepp, gern geschehenGruß Dieter