Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Änderung eines Scripts.Dateien automatisch verschieben.

Frage Entwicklung

Mitglied: DielomaT3000

DielomaT3000 (Level 1) - Jetzt verbinden

15.03.2010, aktualisiert 15:19 Uhr, 7107 Aufrufe, 27 Kommentare

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
27 Antworten
Mitglied: 60730
15.03.2010 um 15:57 Uhr
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></code> Blöcke - siehe Formatierungshilfe.

ruß
Bitte warten ..
Mitglied: DielomaT3000
15.03.2010 um 16:05 Uhr
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...
Bitte warten ..
Mitglied: Biber
15.03.2010 um 16:18 Uhr
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
Bitte warten ..
Mitglied: 76109
15.03.2010 um 17:33 Uhr
Hallo DielomaT3000!

Code wegen Missgefallens wieder entfernt

Gruß Dieter
Bitte warten ..
Mitglied: Biber
15.03.2010 um 18:11 Uhr
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
Bitte warten ..
Mitglied: 76109
15.03.2010 um 18:57 Uhr
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
Bitte warten ..
Mitglied: DielomaT3000
16.03.2010 um 17:06 Uhr
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
Bitte warten ..
Mitglied: Biber
16.03.2010 um 17:30 Uhr
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
Bitte warten ..
Mitglied: DielomaT3000
17.03.2010 um 08:22 Uhr
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.
Bitte warten ..
Mitglied: 76109
17.03.2010 um 10:22 Uhr
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 bringt

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:
01.
Option Explicit 
02.
 
03.
Const FilePath = "E:\Test" 
04.
Const MovePath = "E:\Test\Move" 
05.
 
06.
Const FileType = "txt" 
07.
 
08.
Const Delim = "-" 
09.
 
10.
Const Err1 = "Der Ordner FilePath existiert nicht!" 
11.
Const Err2 = "Der Ordner existiert nicht: %1\%2-*\%3" 
12.
 
13.
Dim Fso, File, Folder, Path, Token, Msg 
14.
 
15.
'Import der Bibliothek für Datei-System-Funktionen 
16.
 Set Fso = CreateObject("Scripting.FileSystemObject") 
17.
 
18.
'Prüfen ob der Pfad in der Konstanten FilePath existiert 
19.
 If Fso.FolderExists(FilePath) = False Then 
20.
     
21.
    'Wenn der Pfad nicht existiert, dann Fehlermeldung ausgeben und Script abbrechen 
22.
     MsgBox Err1, vbExclamation, "Fehler": WScript.Quit 
23.
 End If 
24.
 
25.
'Alle Dateien im Pfad FilePath einlesen 
26.
 For Each File In Fso.GetFolder(FilePath).Files 
27.
     
28.
    'Prüften ob die Dateierweiterung FileType entspricht 
29.
     If LCase(Fso.GetExtensionName(File.Name)) = LCase(FileType) Then 
30.
         
31.
        'Dateinamen mit dem Trennzeichen Delim in Einzelteile zerlegen 
32.
         Token = Split(Fso.GetBaseName(File.Name), Delim) 
33.
         
34.
        'Test ob Dateinamen mindestens 2 Trennzeichen enthält 
35.
         If UBound(Token) >= 1 Then 
36.
             
37.
            'Wenn Ja, dann Funktionsaufruf MovePath ermitteln 
38.
             Path = GetPath(Token) 
39.
             
40.
            'Prüfen ob der Ordner-Pfad existiert 
41.
             If Path = "" Then 
42.
                 
43.
                'Wenn Nein, dann die Meldung mit dem nicht gefundenem Pfad erstellen 
44.
                 Msg = Replace(Replace(Replace(Err2, "%1", MovePath), "%2", Token(0)), "%3", Token(1)) 
45.
                 
46.
                'Meldung ausgeben 
47.
                 MsgBox Msg, vbInformation, "Meldung" 
48.
             Else 
49.
                'Prüfen ob die Datei bereits existiert, gegebenenfalls löschen 
50.
                 If Fso.FileExists(Path & File.Name) Then Fso.DeleteFile Path & File.Name 
51.
                 
52.
                'Wenn OK, dann Datei verschieben 
53.
                 Fso.MoveFile File, Path             End If 
54.
         End If 
55.
     End If 
56.
 
57.
'Nächste Datei einlesen 
58.
 Next 
59.
 
60.
 MsgBox "Fertig!" 
61.
 
62.
Function GetPath(ByRef Token) 
63.
    Dim Folder, SubFolder 
64.
   
65.
    'Rückgabewert mit Leerstring initialisieren 
66.
    GetPath = "" 
67.
     
68.
    'Alle Ordner im Pfad MovePath einlesen 
69.
    For Each Folder In Fso.GetFolder(MovePath).SubFolders 
70.
     
71.
        'Prüfen ob der Ordnername das 1. Token + Trennzeichen enthält 
72.
        If Left(Folder.Name, Len(Token(0)) + 1) = Token(0) & "-" Then 
73.
         
74.
           'Wenn Ja, dann die Unterordner des aktuellen Ordners einlesen 
75.
            For Each SubFolder In Fso.GetFolder(Folder).SubFolders 
76.
                 
77.
               'Prüfen ob der Unter-Ordnername das 2. Token enthält 
78.
                If Left(SubFolder.Name, Len(Token(1))) = Token(1) Then 
79.
                 
80.
                   'Wenn Ja, dann Pfad zurückgeben und Schleife beenden 
81.
                    GetPath = SubFolder & "\":  Exit For 
82.
                End If 
83.
             
84.
           'Nächsten Unterordner einlesen 
85.
            Next 
86.
             
87.
           'Wenn Ordner gefunden, dann Scheife vorzeitig beenden 
88.
            Exit For 
89.
        End If 
90.
     
91.
   'Nächsten Ordner einlesen 
92.
    Next 
93.
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]
Bitte warten ..
Mitglied: DielomaT3000
17.03.2010 um 10:41 Uhr
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
Bitte warten ..
Mitglied: DielomaT3000
17.03.2010 um 10:55 Uhr
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?
Bitte warten ..
Mitglied: 76109
17.03.2010 um 11:20 Uhr
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
Bitte warten ..
Mitglied: DielomaT3000
17.03.2010 um 11:26 Uhr
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
Bitte warten ..
Mitglied: 76109
17.03.2010 um 12:18 Uhr
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
Bitte warten ..
Mitglied: DielomaT3000
17.03.2010 um 13:00 Uhr
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
Bitte warten ..
Mitglied: 76109
17.03.2010 um 18:03 Uhr
Hallo Patrick!

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

Hatte ursprünglich:
01.
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:
01.
If Left(SubFolder.Name, Len(Token(1))) = Token(1) Then GetPath = SubFolder & "\" 
02.
Exit For
Dann kann es natürlich nicht funktionieren

Gruß Dieter
Bitte warten ..
Mitglied: DielomaT3000
17.03.2010 um 19:31 Uhr
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
Bitte warten ..
Mitglied: 76109
17.03.2010 um 19:46 Uhr
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
Bitte warten ..
Mitglied: DielomaT3000
18.03.2010 um 08:02 Uhr
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
Bitte warten ..
Mitglied: 76109
18.03.2010 um 09:39 Uhr
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
Bitte warten ..
Mitglied: DielomaT3000
18.03.2010 um 10:27 Uhr
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
Bitte warten ..
Mitglied: 76109
18.03.2010 um 10:39 Uhr
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
Bitte warten ..
Mitglied: DielomaT3000
18.03.2010 um 10:56 Uhr
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
Bitte warten ..
Mitglied: 76109
18.03.2010 um 12:56 Uhr
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.

01.
Option Explicit 
02.
 
03.
Const LogFile = "Move.Log" 
04.
Const FilePath = "E:\Threads\138258\Test" 
05.
Const MovePath = "E:\Threads\138258\Test\Move" 
06.
 
07.
Const FileType = "txt" 
08.
 
09.
Const Delim = "-" 
10.
 
11.
Const Err1 = "Der Ordner FilePath existiert nicht!" 
12.
Const Err2 = "Folgende Ordner existieren nicht:" 
13.
 
14.
Dim Shell, Fso, File, Folder, Path, Token, Log, LogPath 
15.
 
16.
'Import der Bibliothek für Datei-System-Funktionen 
17.
 Set Fso = CreateObject("Scripting.FileSystemObject") 
18.
 
19.
'Import der Bibliothek für Shell-Funktionen 
20.
 Set Shell = CreateObject("WScript.Shell") 
21.
 
22.
'Prüfen ob der Pfad in der Konstanten FilePath existiert 
23.
 If Fso.FolderExists(FilePath) = False Then 
24.
     
25.
    'Wenn der Pfad nicht existiert, dann Fehlermeldung ausgeben und Script abbrechen 
26.
     MsgBox Err1, vbExclamation, "Fehler": WScript.Quit 
27.
 End If 
28.
 
29.
'Variable mit dem Pfad der Log-Datei 
30.
 LogPath = FilePath & "\" & LogFile 
31.
 
32.
'Log-Datei erstellen 
33.
 Set Log = Fso.CreateTextFile(LogPath) 
34.
 
35.
'Text mit aktuellem Datum und Zeit in Log-Datei schreiben 
36.
 Log.WriteLine "Erstellt: " & Now & vbCrLf & vbCrLf & Err2 
37.
 
38.
'Alle Dateien im Pfad FilePath einlesen 
39.
 For Each File In Fso.GetFolder(FilePath).Files 
40.
     
41.
    'Prüften ob die Dateierweiterung FileType entspricht 
42.
     If LCase(Fso.GetExtensionName(File.Name)) = LCase(FileType) Then 
43.
         
44.
        'Dateinamen mit dem Trennzeichen Delim in Einzelteile zerlegen 
45.
         Token = Split(Fso.GetBaseName(File.Name), Delim) 
46.
         
47.
        'Test ob Dateinamen mindestens 2 Trennzeichen enthält 
48.
         If UBound(Token) >= 1 Then 
49.
             
50.
            'Wenn Ja, dann Funktionsaufruf MovePath ermitteln 
51.
             Path = GetPath(Token) & "\" 
52.
             
53.
            'Prüfen ob der Ordner-Pfad existiert 
54.
             If Path = "\" Then 
55.
                 
56.
                'Wenn Nein, dann fehlenden Pfad in Log-Datei schreiben 
57.
                 Log.WriteLine MovePath & "\" & Token(0) & "-*\" & Token(1) 
58.
             Else 
59.
                'Prüfen ob die Datei bereits existiert, gegebenenfalls löschen 
60.
                 If Fso.FileExists(Path & File.Name) Then Fso.DeleteFile Path & File.Name 
61.
                 
62.
                'Wenn OK, dann Datei verschieben 
63.
                 Fso.MoveFile File, Path 
64.
             End If 
65.
         End If 
66.
     End If 
67.
 
68.
'Nächste Datei einlesen 
69.
 Next 
70.
 
71.
'Log-Datei schließen 
72.
 Log.Close 
73.
 
74.
'Log-Datei im Notpad-Editor anzeigen 
75.
 Shell.Run "Notepad " & """" & LogPath & """" 
76.
 
77.
Function GetPath(ByRef Token) 
78.
    Dim Folder, SubFolder 
79.
   
80.
    'Rückgabewert mit Leerstring initialisieren 
81.
    GetPath = "" 
82.
     
83.
    'Alle Ordner im Pfad MovePath einlesen 
84.
    For Each Folder In Fso.GetFolder(MovePath).SubFolders 
85.
     
86.
        'Prüfen ob der Ordnername das 1. Token + Trennzeichen enthält 
87.
        If Left(Folder.Name, Len(Token(0)) + 1) = Token(0) & "-" Then 
88.
         
89.
           'Wenn Ja, dann die Unterordner des aktuellen Ordners einlesen 
90.
            For Each SubFolder In Fso.GetFolder(Folder).SubFolders 
91.
                 
92.
               'Prüfen ob der Unter-Ordnername das 2. Token enthält 
93.
                If Left(SubFolder.Name, Len(Token(1))) = Token(1) Then 
94.
                 
95.
                   'Wenn Ja, dann Pfad zurückgeben und Schleife beenden 
96.
                    GetPath = SubFolder:  Exit For 
97.
                End If 
98.
             
99.
           'Nächsten Unterordner einlesen 
100.
            Next 
101.
             
102.
           'Prüfen ob Unterordner gefunden wurde. Wenn Nein Unterordner erstellen 
103.
            If GetPath = "" Then GetPath = Fso.CreateFolder(Folder & "\" & Token(1)) 
104.
            
105.
           'Wenn Haupt-Ordner gefunden, dann Scheife vorzeitig beenden 
106.
            Exit For 
107.
        End If 
108.
     
109.
   'Nächsten Ordner einlesen 
110.
    Next 
111.
End Function
Gruß Dieter
Bitte warten ..
Mitglied: DielomaT3000
18.03.2010 um 13:09 Uhr
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
Bitte warten ..
Mitglied: 76109
18.03.2010 um 13:23 Uhr
Hallo Patrick!

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

Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...