VBS- Ordner automatisch erstellen und datei reinkopieren
Hallo Zusammen,
ich bin neu hier und neu in der Welt der Programmierung.
Ich habe folgenden Beitrag auf der Seite gefunden;
Mein Problem ist fast gleich aber bei mir soll der Odner während des kopiervorgangs erstellt werden:
Beispiel:
Ich möchte alle Dateien.txt von C:\Temp nach D:\Ablage kopieren
Falls der kopiervorgang z.B. heute lauf muss folgende Odner erstellt werden und alle txt Dateien von C nach D kopieren: D:\Ablage\Jahr\Monat\Tag
Wobei Jahr immer das aktuelle Jahr ist d.h. D:\Ablage\2011\03\08
Falls der Unterordner D:\Ablage\Jahr\Monat\ schon vorhanden ist, muss nur der unterverzeichnis \Tag erstellt werden.
Der unterverzeichniss Tag muss immer gleich der Tag, an dem das Programm gestartet wird.
Vielen Dank im Voraus für ein Beispiel
Lionne
ich bin neu hier und neu in der Welt der Programmierung.
Ich habe folgenden Beitrag auf der Seite gefunden;
Mein Problem ist fast gleich aber bei mir soll der Odner während des kopiervorgangs erstellt werden:
Beispiel:
Ich möchte alle Dateien.txt von C:\Temp nach D:\Ablage kopieren
Falls der kopiervorgang z.B. heute lauf muss folgende Odner erstellt werden und alle txt Dateien von C nach D kopieren: D:\Ablage\Jahr\Monat\Tag
Wobei Jahr immer das aktuelle Jahr ist d.h. D:\Ablage\2011\03\08
Falls der Unterordner D:\Ablage\Jahr\Monat\ schon vorhanden ist, muss nur der unterverzeichnis \Tag erstellt werden.
Der unterverzeichniss Tag muss immer gleich der Tag, an dem das Programm gestartet wird.
Vielen Dank im Voraus für ein Beispiel
Lionne
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 162244
Url: https://administrator.de/forum/vbs-ordner-automatisch-erstellen-und-datei-reinkopieren-162244.html
Ausgedruckt am: 23.04.2025 um 06:04 Uhr
30 Kommentare
Neuester Kommentar
Hallo lionne und willkommen im Forum!
Das ginge etwa so:
Gibt es übrigens einen speziellen Grund für die Verwendung von VBS? In Batch würde (bis auf die Frage der Namenskollision) dafür eine Zeile der Art
genügen ...
Grüße
bastla
Das ginge etwa so:
QuellOrdner = "C:\TEMP"
QuellTyp = "txt"
ZielOrdner = "D:\Ablage\" & Year(Date) & "\" & Right("0" & Month(Date), 2) & "\" & Right("0" & Day(Date), 2)
Set fso = CreateObject("Scripting.FileSystemObject")
'Zielordner (bei Bedarf) erstellen
Ziel = Split(ZielOrdner, "\") 'Teilpfade durch Zerlegung anhand der "\" bilden
ZielPfad = Ziel(0) 'Start mit Laufwerk
For i = 1 To UBound(Ziel)
ZielPfad = ZielPfad & "\" & Ziel(i) 'ZielPfad um jeweiligen Teilpfad verlängern
If Not fso.folderExists(ZielPfad) Then fso.CreateFolder(ZielPfad) 'und bei Bedarf erstellen
Next
'Dateien kopieren
For Each Datei In fso.GetFolder(QuellOrdner).Files 'alle Dateien des QuellOrdners durchgehen
If LCase(fso.GetExtensionName(Datei.Name)) = LCase(QuellTyp) Then 'Datei des gesuchten Typs?
If Not fso.FileExists(ZielOrdner & "\" & Datei.Name) Then 'gleichnamige Datei bereits vorhanden?
Datei.Copy ZielOrdner & "\" 'Zielangabe mit abschließendem "\" = Ordner
Else
'Namenskollision - was tun?
End If
End If
Next
for /f "tokens=1-3 delims=." %%a in ("%date%") do xcopy C:\TEMP\*.txt D:\Ablage\%%c\%%b\%%a\
Grüße
bastla
Moin lionne,
willkommen im Forum.
Und es gibt auch noch so 5 bis 8 andere, die mich vermutlich noch beim Kommentarschreiben überholen werden.
Dennoch: Magst du nicht erstmal die Teilstringzerlegung/Zusammenbraterei wie in bastlas Zeile 3 angedeutet nachlesen/nachturnen?
Bzw. für die neue Variante anpassen?
Das wäre der ideale nützliche und ungefährliche Einstieg in die wundersame Welt der VBS-Schroterei.
Wenn wir dir vielleicht einen halben Tag Vorsprung geben und du fragst nur nach, falls du nicht mehr weiterweisst?
Und postest ansonsten dein selbst gefundenes Lehrstück?
Nur ein Vorschlag...
Grüße
Biber
willkommen im Forum.
Hast du auch ein Beispiel für mich?
Sicher lässt sich bastla da nicht lange bitten.Und es gibt auch noch so 5 bis 8 andere, die mich vermutlich noch beim Kommentarschreiben überholen werden.
Dennoch: Magst du nicht erstmal die Teilstringzerlegung/Zusammenbraterei wie in bastlas Zeile 3 angedeutet nachlesen/nachturnen?
Bzw. für die neue Variante anpassen?
Das wäre der ideale nützliche und ungefährliche Einstieg in die wundersame Welt der VBS-Schroterei.
Wenn wir dir vielleicht einen halben Tag Vorsprung geben und du fragst nur nach, falls du nicht mehr weiterweisst?
Und postest ansonsten dein selbst gefundenes Lehrstück?
Nur ein Vorschlag...
Grüße
Biber

und die Zwischendrinn-Kombination nicht zu vergessen, sage ich auch mal nix
Gruß Dieter
Gruß Dieter

Hallo bastla!
aber lionne will doch Sub-Ordner ala "..\JJJJ\MM\TT" ("..\2011\03\08" aus Textdatei_20110308.txt) oder habe ich den Kommentar von 18:20:21 falsch verstanden?
Gruß Dieter
aber lionne will doch Sub-Ordner ala "..\JJJJ\MM\TT" ("..\2011\03\08" aus Textdatei_20110308.txt) oder habe ich den Kommentar von 18:20:21 falsch verstanden?
Gruß Dieter

Hallo bastla!

Gruß Dieter
Zitat von @bastla:
Da wären dann zB für das Jahr aus dem String "Textdatei_20110308" die ersten 4 Zeichen der letzten 8 Zeichen zu verwenden ...
Jepp, und der Monat vielleicht 5 und 6 (zwischendrinn)? Da wären dann zB für das Jahr aus dem String "Textdatei_20110308" die ersten 4 Zeichen der letzten 8 Zeichen zu verwenden ...
Gruß Dieter

Hallo bastla!
OK, Du hast gewonnen
Gruß Dieter
[edit] Auf bastlas Anregung (Bibers edukatives Vorhaben ...) den minimalen Code-Ausschnitt wieder entfernt
[\edit]
OK, Du hast gewonnen
Gruß Dieter
[edit] Auf bastlas Anregung (Bibers edukatives Vorhaben ...) den minimalen Code-Ausschnitt wieder entfernt

Hallo Lionne!
Das wird so nix
Da ja die Ordner von der eingelesenen Datei abhängig sind, müssen die Datums- und ZielOrdner-Auswertungen erst in der "For Each-Schleife stattfinden, wobei die Datumsfragmente aus Dateiname in ein Array geschrieben werden, um bastlas For-Schleife für FolderExists/Create verwenden zu können...
Und in Codezeile 27 könnte anstatt "Datei.Copy" auch "Datei.Move" stehen. D.h. wenn die Dateien im Quell-Ordner sowieso gelöscht werden sollen, dann ist ein Verschieben sicher sinnvoller?
Schematisch in etwa so:
Bin mal gespannt, ob Du daraus schlau wirst?
Gruß Dieter
Das wird so nix
Da ja die Ordner von der eingelesenen Datei abhängig sind, müssen die Datums- und ZielOrdner-Auswertungen erst in der "For Each-Schleife stattfinden, wobei die Datumsfragmente aus Dateiname in ein Array geschrieben werden, um bastlas For-Schleife für FolderExists/Create verwenden zu können...
Und in Codezeile 27 könnte anstatt "Datei.Copy" auch "Datei.Move" stehen. D.h. wenn die Dateien im Quell-Ordner sowieso gelöscht werden sollen, dann ist ein Verschieben sicher sinnvoller?
Schematisch in etwa so:
Dim Fso, QuellOrdner, QuellTyp, ZielOrdner, ZielPfad, Datei, Datum, Folder, Folders
ZielOrdner = "C:\Temp\AblageTestDateien"
QuellOrdner = "C:\Temp\TestDateien"
QuellTyp = "txt"
Set Fso = CreateObject("Scripting.FileSystemObject")
For Each Datei In Fso.GetFolder(QuellOrdner).Files 'alle Dateien des QuellOrdners durchgehen
If LCase(Fso.GetExtensionName(Datei.Name)) = LCase(QuellTyp) Then 'Test Datei-Typ
'und hier steht der restliche Code
'1. Datum aus Datei.Name isolieren (Datum = ) und zerlegen -> Folders = Array(JJJJ, MM, TT)
'2. ZielPfad = ZielOrdner (für jede Datei erneut den ZielOrdner (Start-Ordner) vorgeben)
'3. For Each-Schleife (Folder In Folders) FolderExists/CreateFolder (ZielPfad = ZielPfad & "\" & Folder)
'4. Test FileExists(ZielPfad), Datei.Move (Verschieben, wenn die Datei im Quell-Ordner eh gelöscht werden soll)
End If
Next
Bin mal gespannt, ob Du daraus schlau wirst?
Gruß Dieter
Hallo lionne!
Falls Du davon ausgehen kannst, dass jede ".txt"-Datei nach dem gleichen Namensschema aufgebaut ist (und daher in den letzten 8 Stellen des Namens das Datum enthält), musst Du eigentlich gar nicht weiter zerlegen - den Dateinamen ohne Typ (= alle Bestandteile des Namens vor dem letzten enthaltenen Punkt) erhältst Du ja mit dem (weit
) oben angeführten
Falls doch zerlegt werden soll / muss, solltest Du Dir "
Grüße
bastla
Falls Du davon ausgehen kannst, dass jede ".txt"-Datei nach dem gleichen Namensschema aufgebaut ist (und daher in den letzten 8 Stellen des Namens das Datum enthält), musst Du eigentlich gar nicht weiter zerlegen - den Dateinamen ohne Typ (= alle Bestandteile des Namens vor dem letzten enthaltenen Punkt) erhältst Du ja mit dem (weit
fso.GetBaseName(Datei.Name)
Split()
" näher ansehen ...Grüße
bastla

Hallo bastla!
Mit dem zerlegen ist eigentlich das erzeugen des Ordner-Arrays für das testen/erstellen der Sub-Ordner gemeint
Gruß Dieter
Mit dem zerlegen ist eigentlich das erzeugen des Ordner-Arrays für das testen/erstellen der Sub-Ordner gemeint
Gruß Dieter
Hallo Dieter!
Ich hatte mich auf
bezogen - das Zerpflücken des Datums selbst ist natürlich klarerweise erforderlich ...
Grüße
bastla
Ich hatte mich auf
position1 = InStr(Datei, "_") ' Suche die Position von "_" aus Dateiname
position2 = InStr(Datei, ".") ' Suche die Position von "." aus Dateiname
lange = len(position1 - position2) '
datumString = mid(Datei, position1, lange) 'Mid (string, start, [length] )
Grüße
bastla

Hallo bastla!
Achso, ich dachte auf meine Codezeile 12
Gruß Dieter
Achso, ich dachte auf meine Codezeile 12
Gruß Dieter

Hallo Lionne!
OK, dann helfe ich mal ein bisschen
Bei diesem Code wäre zunächst Punkt 1 und 2 erledigt:
Wobei ich Punkt 1 etwas vereinfacht habe. Punkt 3 und 4 solltest Du nun alleine hinbekommen? 
Gruß Dieter
OK, dann helfe ich mal ein bisschen
Bei diesem Code wäre zunächst Punkt 1 und 2 erledigt:
Dim Fso, QuellOrdner, QuellTyp, ZielOrdner, ZielPfad, Datei, Datum, Folder, Folders
ZielOrdner = "C:\Temp\AblageTestDateien"
QuellOrdner = "C:\Temp\TestDateien"
QuellTyp = "txt"
Set Fso = CreateObject("Scripting.FileSystemObject")
For Each Datei In Fso.GetFolder(QuellOrdner).Files 'alle Dateien des QuellOrdners durchgehen
If LCase(Fso.GetExtensionName(Datei.Name)) = LCase(QuellTyp) Then 'Test Datei-Typ
'1. Datum aus Datei.Name isolieren, auf Zahlenwert testen und in Array zerlegen -> Folders = Array(JJJJ, MM, TT)
Datum = Right(Fso.GetBaseName(Datei.Name), 8) 'z.B. Textdatei_20110225.txt, dann Datum = 20110225
If IsNumeric(Datum) Then 'Test ob Datum eine Zahlenwert ist
Folders = Array(Left(Datum, 4), Mid(Datum, 5, 2), Right(Datum, 2)) 'Folders = Array(JJJJ, MM, TT)
'2. ZielPfad = ZielOrdner (für jede Datei erneut den ZielOrdner (Start-Ordner) vorgeben)
ZielPfad = ZielOrdner
'3. For Each-Schleife (Folder In Folders) FolderExists/CreateFolder (ZielPfad = ZielPfad & "\" & Folder)
'4. Test FileExists(ZielPfad & ...), Datei.Move (Verschieben, wenn Datei im Quell-Ordner gelöscht werden soll)
End If
End If
Next
Gruß Dieter

Hallo Lionne!
Freut mich, dass Du den Rest selbst hinbekommen hast
Vermute mal, Du hast das Script mit Notepad++ geschrieben, weil die Tab's etwas verutscht sind
Bei der Codezeile 33 hätte doch eigentlich
ausgereicht oder nicht?
Falls Du kein Plan B hast, für den Fall, dass eine Datei schon existiert, dann kann das Else in Codezeile 35 auch entfallen.
Datenbank? Was für eine Datenbank und was für eine Verbindung? ADO-Recordset...?
In Sachen Datenbanken ist eigentlich Biber - der ein Auge auf uns hat - der Super-Experte
Gruß Dieter
Freut mich, dass Du den Rest selbst hinbekommen hast
Vermute mal, Du hast das Script mit Notepad++ geschrieben, weil die Tab's etwas verutscht sind
Bei der Codezeile 33 hätte doch eigentlich
DateiPfad = ZielPfad & "\" & Datei.Name |
Falls Du kein Plan B hast, für den Fall, dass eine Datei schon existiert, dann kann das Else in Codezeile 35 auch entfallen.
Datenbank? Was für eine Datenbank und was für eine Verbindung? ADO-Recordset...?
In Sachen Datenbanken ist eigentlich Biber - der ein Auge auf uns hat - der Super-Experte
Gruß Dieter
Moin lionne,
zum Thema "gutes Buch für VBS empfehlen":
Mein Tipp: Stöbere erstmal in unseren "Links" in den Bereichen "Batch & Shell" und "Visual Basic, VBA und VB.NET" hier im Forum.
Dort sollten auch einige Empfehlungen zu VBS-Skripting-Seiten und VBS-Tutorials dabei sein.
Bestimmt dabei sind die "Scripting Guys" von Microsoft, auf die wir oft verweisen.
Wenn du damit so zwei, drei Tage zugebracht hast, dann kannst du selbst besser einschätzen, ob ein Buch für absolute beginners oder eine allgemeine Referenz oder aber ein Buch mit tonnenweise Beispielskripten für dich am Sinnvollsten ist.
Was "echte" Bücher zum Thema VBS & Skripting angeht, da fragst du mit bastla, didi1954 und mir garantiert die Falschen.
Also ja: Bücher haben wir alle mehr als eins, aber vermutlich hat keiner von uns jemals ein Buch über VBS gelesen. Da gibt es Spannenderes.
"Learning by doing" würde bastla sicherlich empfehlen und ich kann nur dazu nicken.
Übrigens, es gibt drei Sätze, die ich Frauen nie glaube:
und
Wobei der letzte Satz nicht von dir ist.
Kannst du bitte, wenn die Frage "VBS-Ordner automatisch erstellen und datei reinkopieren" deiner Meinung nach hinreichend beantwortet ist,
heute oder besser noch JETZT einen WG-mortadellafarbenen "Gelöst"-Haken setzen?
In der Hinsicht bin ich ein wenig penibel.
Danke und wir sehen uns im nächsten Beitrag
Biber
P.S. @bastla und didi1954
Vielen Dank, dass ihr so zurückhaltend und geduldig wart!
zum Thema "gutes Buch für VBS empfehlen":
Mein Tipp: Stöbere erstmal in unseren "Links" in den Bereichen "Batch & Shell" und "Visual Basic, VBA und VB.NET" hier im Forum.
Dort sollten auch einige Empfehlungen zu VBS-Skripting-Seiten und VBS-Tutorials dabei sein.
Bestimmt dabei sind die "Scripting Guys" von Microsoft, auf die wir oft verweisen.
Wenn du damit so zwei, drei Tage zugebracht hast, dann kannst du selbst besser einschätzen, ob ein Buch für absolute beginners oder eine allgemeine Referenz oder aber ein Buch mit tonnenweise Beispielskripten für dich am Sinnvollsten ist.
Was "echte" Bücher zum Thema VBS & Skripting angeht, da fragst du mit bastla, didi1954 und mir garantiert die Falschen.
Also ja: Bücher haben wir alle mehr als eins, aber vermutlich hat keiner von uns jemals ein Buch über VBS gelesen. Da gibt es Spannenderes.
"Learning by doing" würde bastla sicherlich empfehlen und ich kann nur dazu nicken.
Übrigens, es gibt drei Sätze, die ich Frauen nie glaube:
und
(3) "Ich bin gleich fertig, ich muss mir nur schnell was überziehen."
Wobei der letzte Satz nicht von dir ist.
Kannst du bitte, wenn die Frage "VBS-Ordner automatisch erstellen und datei reinkopieren" deiner Meinung nach hinreichend beantwortet ist,
heute oder besser noch JETZT einen WG-mortadellafarbenen "Gelöst"-Haken setzen?
In der Hinsicht bin ich ein wenig penibel.
Danke und wir sehen uns im nächsten Beitrag
Biber
P.S. @bastla und didi1954
Vielen Dank, dass ihr so zurückhaltend und geduldig wart!

Hallo Lionne!

Auf dieser Seite findes Du eine nützliche VBS-Hilfedatei (script56.chm) zum downloaden und sonstige Skript-Beispiel.Dateien.
Ansonsten noch viel Spaß beim VBS-Lernen!
Gruß Dieter
Zitat von @Biber:
Was "echte" Bücher zum Thema VBS & Skripting angeht, da fragst du mit bastla, didi1954 und mir garantiert die Falschen.
Also ja: Bücher haben wir alle mehr als eins, aber vermutlich hat keiner von uns jemals ein Buch über VBS gelesen. Da
gibt es Spannenderes. "Learning by doing" würde bastla sicherlich empfehlen und ich kann nur dazu nicken.
Dem stimme ich voll und ganz zu und hätte es nicht besser formulieren könnenWas "echte" Bücher zum Thema VBS & Skripting angeht, da fragst du mit bastla, didi1954 und mir garantiert die Falschen.
Also ja: Bücher haben wir alle mehr als eins, aber vermutlich hat keiner von uns jemals ein Buch über VBS gelesen. Da
gibt es Spannenderes. "Learning by doing" würde bastla sicherlich empfehlen und ich kann nur dazu nicken.
Auf dieser Seite findes Du eine nützliche VBS-Hilfedatei (script56.chm) zum downloaden und sonstige Skript-Beispiel.Dateien.
Ansonsten noch viel Spaß beim VBS-Lernen!
Gruß Dieter