MONGi 0 Geschrieben 15. Februar 2014 Melden Teilen Geschrieben 15. Februar 2014 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\_TEST1C:\_SCRIPT-TEST\_TEST2C:\_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-2009Verzeichnisname 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. Zitieren Link zu diesem Kommentar
Daniel -MSFT- 129 Geschrieben 15. Februar 2014 Melden Teilen Geschrieben 15. Februar 2014 Was ist denn die Anforderung dahinter? Warum musst Du das so machen? Zitieren Link zu diesem Kommentar
AndreasNick 0 Geschrieben 18. Februar 2014 Melden Teilen Geschrieben 18. Februar 2014 (bearbeitet) 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 18. Februar 2014 von AndreasNick Zitieren Link zu diesem Kommentar
MONGi 0 Geschrieben 21. Februar 2014 Autor Melden Teilen Geschrieben 21. Februar 2014 @ECHO OFF &SETLOCAL enableDelayedExpansion FOR /d %%a IN (C:\TEST\NV1\* C:\TEST\NV2\* C:\TEST\NV3\*) DO SET "$%%~na=%%~na" FOR /d %%a IN ("C:\TEST\HV\*") DO FOR /f "tokens=2delims=- " %%b IN ("%%~na") DO IF NOT DEFINED $%%b RD /s /q "%%~a" Falls es jemanden interessiert, dieser Code funktioniert. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.