Kopieren mit Variable

flame4ever

Grünschnabel
So hab ich es jetzt aber der erkennt den dateipfad nicht, kann es sein das $Text nicht richtig übergeben wir?
MfG flame4ever
HTML:
Dim Kopieren, objFSO, oFolders, oFolder, oSubFolders, Text
Set Kopieren = CreateObject("Scripting.FileSystemObject")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolders = objFSO.GetFolder("Ordner1\Ordner2\")  'Festlegen des Hauptordners
Set oSubFolders = oFolders.SubFolders ' Ermitteln der Unterordner
For Each oFolder In oSubFolders   
 Text = oFolder.Name    ' Speichern des aktuellen unterordner in Textable Text
 Kopieren.copyFile "Ordner1\Ordner2\" & Text & "\Ordner3\dat1.doc", "Ordner1\Ordner6\" & Text & ".doc", True
 If Kopieren.FileExists ("Ordner1\Ordner2\" & Text & "\Ordner4\dat2.doc") Then
 Kopieren.copyFile "Ordner1\Ordner2\" & Text & "\Ordner3\Ordner4\dat2.doc", "Ordner1\Ordner5\" & Text & ".doc", True
 End If
 Kopieren.copyFile "Ordner1\Ordner2\" & Text & "\Ordner3\Ordner4\dat3.doc", "Ordner1\Ordner5\" & Text & ".doc", True
Next
 

Yaslaw

alter Rempler
Moderator
Du hast da ein ziemliches Chaos drin. Warum Kopieren und objFSO? Das sind 2 Objekte derselben Klasse.

Was zum Teufel kopierst du dann alles herum?

Mach doch mal ein kleines Datenbeispiel. Also die Struktir IST und die Struktur SOLL

Etwa so
Code:
IST:
HaubtOrdner/Ordner1/Datei1.txt
           		   /Datei2.txt
           /Ordner1/Datei3.txt
           		   /Datei4.txt
                   
                   
SOLL:
Haubtordner/NeuerOrdner/Ordner1_Datei1.txt	
                       /Ordner1_Datei2.txt
                       /Ordner1_Datei3.txt
                       /Ordner1_Datei4.txt
 

flame4ever

Grünschnabel
Hab es jetzt etwas verständlicher beschrieben.
1. auslesen wie der ordner zb_test heist.
2.Datei pa.doc nach pa kopieren und zu zb_test(pa).doc (ausgelesener ordnername) umbenennen.
3.wenn m2.doc in pr\zb_test\pa\Q da ist -> nach \Q kopieren und zb_test(pa).doc (ausgelesener ordnername) umbenennen
-> wenn nicht dann m1.doc aus pr\zb_test\pa\Q -> nach \Q kopieren und zb_test(pa).doc (ausgelesener ordnername) umbenennen
Code:
IST:
       \pa
       \pr
           \zb_test
                        \pa
                               \pa.doc
                               \Q
                                    m1.doc
                                    m2.doc
       \Q
 
SOLL:
       \pa
            zb_test(pa).doc
       \pr
           \zb_test
                        \pa
                               \pa.doc
                               \Q
                                    m1.doc
                                    m2.doc
       \Q
             zb_test(m2).doc

Visual Basic:
Dim objFSO, oFolders, oFolder, oSubFolders, Text
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolders = objFSO.GetFolder("Au\Pr\")  'Festlegen des Hauptordners
Set oSubFolders = oFolders.SubFolders ' Ermitteln der Unterordner
For Each oFolder In oSubFolders
 Text = oFolder.Name    ' Speichern des aktuellen unterordner in Textable Text
 objFSO.copyFile "Au\Pr\"& Text &"\Pa\Pa.doc", "Au\Pa\"& Text &".doc", True
 If objFSO.FileExists ("Au\Pr\"& Text &"\Pa\Q\M2.doc") Then
 objFSO.copyFile "Au\Pr\"& Text &"\Pa\Q\M2.doc", "Au\Q\"& Text &".doc", True
 End If
 objFSO.copyFile "Au\Pr\"& Text &"\Pa\Q\M1.doc", "Au\Q\"& Text &".doc", True
Next
 

Yaslaw

alter Rempler
Moderator
So gehts recht einfach
Visual Basic:
Public Sub copyMyFiles()
On Error GoTo Err_Handler
    
    Const C_START_PATH As String = "C:\temp\vbtest\"

    Dim fso As New FileSystemObject     'Dateisystem
    Dim srcMasterFolder As folder       'Sourcen-Ordner     "\pr"
    Dim nameFolder As folder            'Ordner der die neuen Dateinamen bestimmt  "\pr\zb_test"
    
    Set srcMasterFolder = fso.GetFolder(C_START_PATH & "pr")
    
    For Each nameFolder In srcMasterFolder.SubFolders
        Call copyMyFilesLoop(nameFolder, nameFolder.name, C_START_PATH)
    Next nameFolder
    
Exit_Handler:
On Error Resume Next
    'Alle Objekte zerstören
    Set nameFolder = Nothing
    Set srcFolder = Nothing
    Set fso = Nothing
    Exit Sub

Err_Handler:
    MsgBox Err.Description
    GoSub Exit_Handler
End Sub

' @param    actFolder       Aktueller Ordner
' @param    name            Name der für die Dateinamenerstellung gebraucht wird
' @param    startPath       C_START_PATH
Public Sub copyMyFilesLoop(ByVal actFolder As folder, ByVal name As String, ByVal startPath As String)
On Error GoTo Err_Handler
    Dim srcFolder As folder     'Ordner mit den Source-Dateien
    Dim srcFile As File         'Zu kopierende Datei
    Dim dstName As String       'Ziel-Dateiname
    
    For Each srcFolder In actFolder.SubFolders
        For Each srcFile In srcFolder.Files
            dstName = name & "_" & srcFile.name
            Call srcFile.Copy(startPath & srcFolder.name & "\" & dstName, True)
        Next srcFile
        'Sich selber aufrufen um Unterordner ebenfalls abzuarbeiten
        Call copyMyFilesLoop(tmpFolder, name, startPath)
    Next srcFolder
    
Exit_Handler:
On Error Resume Next
    'Alle Objekte zerstören
    Set srcFolder = Nothing
    Set srcFile = Nothing
    Exit Sub

Err_Handler:
    MsgBox Err.Description
    GoSub Exit_Handler
End Sub
 

Yaslaw

alter Rempler
Moderator
Ich frag mal so.
Warum durchsuchst du die Ordner, wenn du nachher in deinen if-Statements eh alles Fix codiert hast?
Dein Script geht von fixen Namen aus. Wenn da eine Datei dazukommt, darfst du dein Programm erweitern. Meinem ists egal, es nimmt alles
 

flame4ever

Grünschnabel
Dein Script sieht schon gut aus aber ich verstehe es leider nicht, da ich erst neu mit vb-script anfange.
Wegen meinen Script, dass hab ich gemacht weil nur der zb_test ordner sich verändernt, alles andere bleibt immer gleich. Es wäre echt super wenn du den fehler finden könntest?
Ich bekomme immer die Meldung, dass der ordnerpfad nicht gefunden werden konnte, da wird doch bestimmt der ausgelesene name beim kopieren nicht richtig übergeben.
 
Zuletzt bearbeitet: