Top-Themen

Aktuelle Themen (A bis Z)

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.

Mitglied: DielomaT3000

DielomaT3000 (Level 1) - Jetzt verbinden

15.03.2010, aktualisiert 15:19 Uhr, 7273 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 ..
Ähnliche Inhalte
Drucker und Scanner
Automatisch Drucken
Frage von manu90Drucker und Scanner7 Kommentare

hi zusammen, wir haben einen Tintenstrahldrucker im Einsatz der läuft immer Gefahr, dass die Tinten eintrocknen weil der nicht ...

Windows 7
Netzlaufwerke automatisch verbinden
Frage von DogukannWindows 77 Kommentare

Hallo Admins, ich habe bei uns auf der Firma mit einem User Netzlaufwerk probleme. Erst das System: Betriebssystem: Win7 ...

Batch & Shell
Automatisch Treiber herunterladen
gelöst Frage von R3nD0mBatch & Shell6 Kommentare

Tach :) Mal eine Frage: Wir bräuchten ein Script damit wir Treiber von diversen Websiten herunterladen können. Nun das ...

Windows 10
Bitlocker automatisch entschüsseln
gelöst Frage von jojo0411Windows 107 Kommentare

Hallo Leute, Ich bin neu bei dem Thema und habe mich soweit im Internet schlau gemacht. Ich habe die ...

Neue Wissensbeiträge
Windows 7
Updategängelung auf Windows 10, die zweite
Information von Penny.Cilin vor 19 StundenWindows 7

Hallo, da Windows 7 im kommenden Jahr nicht mehr supportet wird, werden Nutzer von Window 7 home premium wieder ...

Internet
EU-Urheberrechtsreform: Zusammenfassung
Information von Frank vor 3 TagenInternet1 Kommentar

Auf golem.de gibt es eine Analyse von Friedhelm Greis, der das Thema EU-Urheberrechtsreform gut und strukturiert zusammenfasst. Zwar haben ...

Microsoft Office

Office365 Schwachstellen bei Sicherheit und Datenschutz

Information von Penny.Cilin vor 4 TagenMicrosoft Office7 Kommentare

Auf Heise+ gibt es einen Artikel bzgl. Office365 Schwachstellen. Das ist noch ein Grund mehr seine Daten nicht in ...

Sicherheit
Schwachstellen in VPN Clients
Tipp von transocean vor 6 TagenSicherheit2 Kommentare

Moin, es gibt Sicherheitslücken bei VPN Clients namhafter Hersteller, wie man hier lesen kann. Gruß Uwe

Heiß diskutierte Inhalte
Virtualisierung
Unix System virtualisieren
Frage von BananenmeisterVirtualisierung10 Kommentare

Hallo Zusammen, Ich möchte gerne eine Virtualisierungs-Software auf meinem kleinen ML Server installieren um einige Unix Systeme zu virtualisieren. ...

LAN, WAN, Wireless
Lancom und VLANs
Frage von TimmheLAN, WAN, Wireless10 Kommentare

Hallo an alle ich habe momentan ein sehr merkwürdiges problem bei dem ich nicht mehr weiter komme und hoffe ...

Hyper-V
Chaosbeseitigung in Domainlandschaft
Frage von Rolf935Hyper-V10 Kommentare

Hallo zusammen, ich hätte gerne mal ein paar praktische Tipps oder Hinweise. Derzeit haben wir einen NAS als Fileserver ...

Notebook & Zubehör
Hardware defekt ?
Frage von mausemuckelNotebook & Zubehör9 Kommentare

Hallo und ein schönes Osterfest an alle. Ich benötige mal euer Schwarm wissen. Ich habe hier ein Notebook Lenovo ...