Jump to content

Verzeichnisnamen vergleichen und wenn...löschen (Teilvergleich)


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

ich bin auf der Suche nach einer passenden und funktionierenden Lösung zu meinem Vorhaben.

Es werden Sicherungen von den Unterverzeichnissen der angegebenen Pfade durchgeführt (lokale Verzeichnisse), die Kopien werden in einem Ordner abgelegt (Sicherungsverzeichnis)

Hier ein Beispiel, wie meine Ordnerstruktur derzeit in der Testphase aussieht.


Lokale Verzeichnisse:
C:\_SCRIPT-TEST\_TEST1
C:\_SCRIPT-TEST\_TEST2
C:\_SCRIPT-TEST\_TEST3
... weitere 7 Verzeichnispfade sollen über das Skript eingetragen werden können, die Unterverzeichnisse von _Test1, _Test2 und _Test3 werden nach C:\_SCRIPT-TEST\_TEST kopiert.

Sicherungsverzeichnis:
C:\_SCRIPT-TEST\_TEST


Das Skript soll nun die Namen der Unterverzeichnisse innerhalb der angegebenen Lokale Verzeichnisse zusammenfassen und mit den Namen der Unterverzeichnisse des angegebenen Sicherungsverzeichnis vergleichen.

Vergleichsvorgang:
Es ist zu beachten, dass die Verzeichnisnamen der Unterordner zwischen Lokale Verzeichnisse und Sicherungsverzeichnis nicht gleich sind! Das Skript müsste demnach den Verzeichnisname unter lokalen Verzeichnisse auslesen und mit den unter Sicherungsverzeichnis vergleichen.

Wenn vorhanden = nichts tun

Wenn nicht vorhanden = löschen

Es sollen nur die Unterverzeichnisse unter Sicherungsverzeichnis gelöscht werden!


Verzeichnisname unter einem lokalen Verzeichnis:
Sommerurlaub.Teneriffa-2009
Verzeichnisname unter dem Sicherungsverzeichnis:
01 - Sommerurlaub.Teneriffa-2009 - variabler Text


Löschvorgang:
Existiert das Verzeichnis mit dem Namen Sommerurlaub.Teneriffa-2009 unter einem lokalen Verzeichnis nicht mehr, soll das Verzeichnis Namens 01 - Sommerurlaub.Teneriffa-2009 - variabler Text unter dem Sicherungsverzeichnis gelöscht werden.

======================


Im Moment habe ich ein Script, welches mir eine Zusammenfassung der Unterverzeichnisse in eine Textdatei schreibt:

@echo off
del C:\_SCRIPT-TEST\_TEST\TEST-log.txt
del C:\_SCRIPT-TEST\_TEST\TEST123-log.txt
dir C:\_SCRIPT-TEST\_TEST /A:D /B /S > C:\_SCRIPT-TEST\_TEST\TEST-log.txt
dir C:\_SCRIPT-TEST\_TEST1 C:\_SCRIPT-TEST\_TEST2 C:\_SCRIPT-TEST\_TEST3 /A:D /B /S > C:\_SCRIPT-TEST\_TEST\TEST123-log.txt

Nun bekam ich von jemandem folgenden Code mit dem es eigentlich funktionieren sollte...irgendwie stimmt da aber was nicht:

@ECHO OFF &SETLOCAL disableDelayedExpansion
FOR /d %%a IN ("C:\_SCRIPT-TEST\_TEST") DO (
SET "POName=%%~a"
SETLOCAL enableDelayedExpansion
SET "PCName=!POName:*(Kopie von =!"
FOR /f "delims=" %%b IN ("!PCName!") DO SET "PCName=%%~b"
IF NOT EXIST "!PCName!" ECHO RD /s /q "!POName!"
ENDLOCAL
)


Wäre jemand so nett mir unter die Arme zu greifen?

Vielen Dank.

Link zu diesem Kommentar

Hier ist ein Codefragment von mir in Powershell. Dieses vergleicht zwei Ordner und findet alles, was gelöscht wurde. Dieses Skript macht also etwas ähnliches und kann sicher leicht modifiziert werden.

 

$SourceFileTabel = @{}
  $SourceFolderTabel = @{}
  $FolderSecondary = "C:\temp\1"  #Example
  $FolderPrimary = "C:\temp\2"       #Example
  $DeletedFolders = @()
  $DeletedFiles = @()


  function get-Matcher([String] $str){
    $str = $str -replace "\\","\\"
    $str = $str -replace "\(","\("
    $str = $str -replace "\)","\)"
    $str = $str -replace "\+","\+"
    $str = $str -replace "\*","\*"
    $str = $str -replace '\ ,'\
    return $str
  }

  foreach($File in Get-ChildItem $FolderSecondary -Recurse){
        if (!(Test-Path $File.FullName -PathType Container )) {
             $tmp = get-Matcher $FolderSecondary
             $SourceFileTabel.Add(($File.FullName -replace $tmp),$File.Name)
         } else{
             $tmp = get-Matcher $FolderSecondary
             $SourceFolderTabel.Add($File.FullName -replace $tmp, $File.FullName)
         }
    }
    
    foreach($File in Get-ChildItem $FolderPrimary -Recurse){
    
        if (!(Test-Path $File.FullName -PathType Container)) {
            $tmp = get-Matcher $FolderPrimary
            if($SourceFileTabel[($File.FullName -replace $tmp)] -eq $null){
            $DeletedFiles += ($File.FullName -replace $tmp)
        }
        } else {
            $tmp = get-Matcher $FolderPrimary    
            if($SourceFolderTabel[($File.FullName -replace $tmp)] -eq $null){
                $tmp = get-Matcher $FolderPrimary        
                $DeletedFolders += (($File.FullName -replace $tmp,"")) #Stammordner gleich mit ausblenden
            }
    }
    }
    
    
    foreach($item in $DeletedFiles){
        Write-Host $item
    }
        
    foreach($item in $DeletedFolders){
        Write-Host $item
    }
bearbeitet von AndreasNick
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...