Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Verzeichnisstruktur kopieren - ohne Inhalt!

Verzeichnisstruktur kopieren - ohne Inhalt!
27.07.2007 09:55:19
Klaus
Hallo zusammen,
ich möchte den Verzeichnisbaum von einem Laufwerk bzw. von einem bestimmten Unterverzeichnis (z. B. c: \temp) in ein anderes Laufwerk (z. B. d:\sicherung) kopieren.
Es soll nur die Verzeichnisstruktur ohne Inhalt/Dateien kopiert werden (z. B. mit copyFolder klappt das ja nicht).
Im Ziellaufwerk existieren schon Teile des Verzeichnisbaums mit einigen Dateien. Diese sollen natürlich erhalten bleiben, es sollen also nur die "neuen" Verzeichnisse hinzugefügt werden.
Vielen Dank für Euere Hilfe!
Klaus

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verzeichnisstruktur kopieren - ohne Inhalt!
27.07.2007 10:01:00
Chaos
Servus,
ein Verzeichnis kann man z.B.: so erstellen.
Dim strpfad
strpfad = "C:\Ordner"
If Dir(strpfad, vbDirectory) = "" Then
On Error Resume Next
MkDir strpfad
gilt allerdings immer nur für einen Ordner, d.h.: wenn du z.B. sowas willst.
C:\Ordner\Unterordner, dann musst du das so schreiben:
Dim strpfad, strpfad 1
strpfad = "C:\Ordner"
If Dir(strpfad, vbDirectory) = "" Then
On Error Resume Next
MkDir strpfad
strpfad1 = "C:\Ordner\Unterordner"
If Dir(strpfad1, vbDirectory) = "" Then
On Error Resume Next
MkDir strpfad1
Gruß
Chaos

Anzeige
AW: Verzeichnisstruktur kopieren - ohne Inhalt!
27.07.2007 11:18:00
ransi
Hallo Klaus
Teste mal das hier:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Dim arr
Dim L As Long

Public Sub Aufruf()
Dim objShell As Object
Dim objFolder As Object
Dim objItem As Object
L = 0
Redim arr(1)
Set objShell = CreateObject("Shell.Application")
With objShell
    Set objFolder = .BrowseForFolder(0&, "Startordner suchen", 0)
End With
If Not objFolder Is Nothing Then
    Set objItem = objFolder.Self
    arr(L) = objItem.Path
    arr(1) = "D:\Testordner"
    L = 1
    Else: Exit Sub
End If
Schreiben objItem.Path
verzeichnisse_erstellen (arr)
End Sub

Public Sub Schreiben(Suchordner)
Dim fso As Object
Dim datei
Dim Unterordner
Set fso = CreateObject("Scripting.FileSystemObject")
Set datei = fso.getfolder(Suchordner)
On Error Resume Next
For Each Unterordner In datei.subfolders
    L = L + 1
    Redim Preserve arr(L)
    arr(L) = Replace(Unterordner.Path, arr(0), "D:\Testordner")
    Schreiben Unterordner
Next
Set fso = Nothing
Set datei = Nothing
End Sub

Public Sub verzeichnisse_erstellen(a)
Dim LNG As Long
On Error Resume Next
For LNG = 1 To UBound(arr)
    If Dir(arr(LNG)) = "" Then MkDir arr(LNG)
Next
End Sub

Nimm aber erstmal verzeichnisse in denen nichts steht.
ransi

Anzeige
AW: Verzeichnisstruktur kopieren - ohne Inhalt!
29.07.2007 12:56:00
klaus
Hallo Ransi,
klappt ganz gut und mit einem zusätzlichen Check, ob es das Verzeichnis auf dem Ziellaufwerk existiert (in diesem Fall wird das Verzeichnis natürlich nicht neu angelegt) werden dort auch keine Dateien überschrieben...
Danke und Gruß
Klaus

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Verzeichnisstruktur kopieren - ohne Inhalt


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues Makro, indem Du in den Entwicklertools auf "Visual Basic" klickst.

  2. Füge den folgenden Code in ein neues Modul ein:

    Option Explicit
    
    Dim arr
    Dim L As Long
    
    Public Sub Aufruf()
       Dim objShell As Object
       Dim objFolder As Object
       Dim objItem As Object
       L = 0
       Redim arr(1)
       Set objShell = CreateObject("Shell.Application")
       With objShell
           Set objFolder = .BrowseForFolder(0, "Startordner suchen", 0)
       End With
       If Not objFolder Is Nothing Then
           Set objItem = objFolder.Self
           arr(L) = objItem.Path
           arr(1) = "D:\Testordner" ' Zielordner
           L = 1
       Else: Exit Sub
       End If
       Schreiben objItem.Path
       verzeichnisse_erstellen (arr)
    End Sub
    
    Public Sub Schreiben(Suchordner)
       Dim fso As Object
       Dim datei
       Dim Unterordner
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set datei = fso.getfolder(Suchordner)
       On Error Resume Next
       For Each Unterordner In datei.subfolders
           L = L + 1
           Redim Preserve arr(L)
           arr(L) = Replace(Unterordner.Path, arr(0), "D:\Testordner")
           Schreiben Unterordner
       Next
       Set fso = Nothing
       Set datei = Nothing
    End Sub
    
    Public Sub verzeichnisse_erstellen(a)
       Dim LNG As Long
       On Error Resume Next
       For LNG = 1 To UBound(arr)
           If Dir(arr(LNG)) = "" Then MkDir arr(LNG)
       Next
    End Sub
  3. Passe den Zielordner an Deine Bedürfnisse an. In diesem Beispiel wird "D:\Testordner" verwendet.

  4. Führe das Makro aus, um die Verzeichnisstruktur zu kopieren, ohne die Inhalte zu übertragen.


Häufige Fehler und Lösungen

  • Fehler: "Verzeichnis existiert bereits"

    • Lösung: Der Code überprüft automatisch, ob das Verzeichnis schon existiert, bevor es neu angelegt wird.
  • Fehler: "Zugriff verweigert"

    • Lösung: Stelle sicher, dass Du die notwendigen Berechtigungen für die Ordner hast, sowohl beim Quell- als auch beim Zielverzeichnis.

Alternative Methoden

Eine einfache Möglichkeit, um die Ordnerstruktur zu kopieren, ist die Verwendung von PowerShell. Hier ist ein Beispielbefehl:

Get-ChildItem "C:\temp" -Recurse | Where-Object { $_.PSIsContainer } | ForEach-Object {
    $dest = $_.FullName.Replace("C:\temp", "D:\sicherung")
    New-Item -ItemType Directory -Path $dest -Force
}

Dieser Befehl erstellt die Verzeichnisstruktur von "C:\temp" nach "D:\sicherung", ohne die Dateien zu kopieren.


Praktische Beispiele

Angenommen, Du hast folgende Verzeichnisstruktur in "C:\temp":

C:\temp
├── Unterordner1
│   └── Unterunterordner1
└── Unterordner2

Nach dem Ausführen des Codes wird die Struktur in "D:\Testordner" so aussehen:

D:\Testordner
├── Unterordner1
│   └── Unterunterordner1
└── Unterordner2

Dabei bleiben die bestehenden Dateien im Zielverzeichnis unberührt.


Tipps für Profis

  • Verwende relative Pfade, wenn Du das Makro in verschiedenen Umgebungen nutzen möchtest.
  • Nutze Kommentare im VBA-Code, um die Funktionalität zu erläutern und die Wartung zu erleichtern.
  • Teste den Code zunächst in einer sicheren Umgebung, um unerwünschte Änderungen an wichtigen Daten zu vermeiden.

FAQ: Häufige Fragen

1. Kann ich die Struktur von mehreren Laufwerken kopieren?
Ja, Du kannst den Code anpassen, um die Struktur von mehreren Laufwerken zu kopieren. Du musst lediglich den Pfad im Code ändern.

2. Funktioniert das auch in Excel für Mac?
Der gezeigte VBA-Code funktioniert nur in der Windows-Version von Excel. Für Mac musst Du alternative Methoden wie AppleScript verwenden.

3. Wie kann ich die Struktur in eine Excel-Tabelle exportieren?
Du kannst die Verzeichnisstruktur in eine Excel-Tabelle kopieren, indem Du während des Kopiervorgangs die Pfade in eine Array-Variable speicherst und dann die Werte in die Zellen der Tabelle schreibst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige