
115129
17.02.2014, aktualisiert am 20.02.2014
Namensvergleich von Unterverzeichnisse
Hallo allerseits,
ich bin neu in diesem Forum und möchte an erster Stelle alle recht herzlich Grüßen
Ein Script wird gesucht, welches folgender Ablauf aufweisen kann:
Voreinstellungen, die ich im Skript eintragen müsste:
- Pfadangabe eines Hauptverzeichnis (z.B. C:\Hauptverzeichnis\)
- Pfadangabe von 9 Nebenverzeichnisse (z.B. D:\Nebenverzeichnis1\ , D:\Nebenverzeichnis2\ , etc.)
Im Hauptverzeichnis befinden sich Kopien des Inhalts aller Nebenverzeichnisse.
Angenommen ein Unterordner innerhalb eines Nebenverzeichnisses wird gelöscht...dann wäre die Kopie im Hauptverzeichnis noch vorhanden.
Das Skript soll die Ordnernamen im Hauptverzeichnis auslesen; danach die Ordnernamen unter den Nebenverzeichnisse. Dies mache ich im Moment wie folgt:
Nun muss ein Vergleich zwischen beider Textdateien stattfinden, das Problem sind unterschiedliche Ordnernamen (siehe nächste Zeile):
log-HV.txt ---> z.B. 01 - Outlook - irgendeintext
log-NV.txt ---> z.B. Outlook
Es muss demnach immer der Ordnername bzw. die Variable "Outlook" (Inhalt von log-NV.txt) ausgelesen und im Hauptverzeichnis gesucht werden. Wurde der Ordner "Outlook" unter einem Nebenverzeichnis gelöscht, soll der vorhandene unter Hauptverzeichnis ebenfalls gelöscht werden.
Meine Suchaktionen im Internet waren bis jetzt alle erfolglos, in der Hoffnung eine ähnliche Aufgabenstellung zu finden.
Wäre mein Vorhaben ohne großen Aufwand umzusetzen?
Vielen Dank schon mal im voraus.
EDIT: Es kann auch Powershell oder VBS sein, ich möchte es in die Windows-Aufgabenplanung integrieren.
ich bin neu in diesem Forum und möchte an erster Stelle alle recht herzlich Grüßen
Ein Script wird gesucht, welches folgender Ablauf aufweisen kann:
Voreinstellungen, die ich im Skript eintragen müsste:
- Pfadangabe eines Hauptverzeichnis (z.B. C:\Hauptverzeichnis\)
- Pfadangabe von 9 Nebenverzeichnisse (z.B. D:\Nebenverzeichnis1\ , D:\Nebenverzeichnis2\ , etc.)
Im Hauptverzeichnis befinden sich Kopien des Inhalts aller Nebenverzeichnisse.
Angenommen ein Unterordner innerhalb eines Nebenverzeichnisses wird gelöscht...dann wäre die Kopie im Hauptverzeichnis noch vorhanden.
Das Skript soll die Ordnernamen im Hauptverzeichnis auslesen; danach die Ordnernamen unter den Nebenverzeichnisse. Dies mache ich im Moment wie folgt:
@echo off
del C:\HV\log-HV.txt
del C:\HV\log-NV.txt
dir C:\HV\ /A:D /B /S > C:\HV\log-HV.txt
dir C:\NV1 C:\NV2 C:\NV3 C:\NV4 C:\NV5 C:\NV6 C:\NV7 C:\NV8 C:\NV9 /A:D /B /S > C:\HV\log-NV.txt
Nun muss ein Vergleich zwischen beider Textdateien stattfinden, das Problem sind unterschiedliche Ordnernamen (siehe nächste Zeile):
log-HV.txt ---> z.B. 01 - Outlook - irgendeintext
log-NV.txt ---> z.B. Outlook
Es muss demnach immer der Ordnername bzw. die Variable "Outlook" (Inhalt von log-NV.txt) ausgelesen und im Hauptverzeichnis gesucht werden. Wurde der Ordner "Outlook" unter einem Nebenverzeichnis gelöscht, soll der vorhandene unter Hauptverzeichnis ebenfalls gelöscht werden.
Meine Suchaktionen im Internet waren bis jetzt alle erfolglos, in der Hoffnung eine ähnliche Aufgabenstellung zu finden.
Wäre mein Vorhaben ohne großen Aufwand umzusetzen?
Vielen Dank schon mal im voraus.
EDIT: Es kann auch Powershell oder VBS sein, ich möchte es in die Windows-Aufgabenplanung integrieren.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 230164
Url: https://administrator.de/forum/namensvergleich-von-unterverzeichnisse-230164.html
Ausgedruckt am: 11.05.2025 um 04:05 Uhr
20 Kommentare
Neuester Kommentar
Hallo BlattlausOG und willkommen im Forum!
Unter der Annahme, dass die Ordnernamen des Hauptverzeichnisses tatsächlich immer dem angegebenen Schema ensprechen (inkl der Leerzeichen vor und nach den "-"), könnte das etwa so gehen (ungetestet):
Es wird hier nur die erste Unterordnerebene der Nebenverzeichnisse überprüft und Groß-/Kleinschreibung ignoriert. Wegen des "
@ Endoro
Grüße
bastla
[Edit] %-Zeichen in Zeile 6 ergänzt [/Edit]
Unter der Annahme, dass die Ordnernamen des Hauptverzeichnisses tatsächlich immer dem angegebenen Schema ensprechen (inkl der Leerzeichen vor und nach den "-"), könnte das etwa so gehen (ungetestet):
@echo off & setlocal
set "HV=D:\Hauptverzeichnis"
set "NV=C:\NV1 C:\NV2 C:\NV3 C:\NV4 C:\NV5 C:\NV6 C:\NV7 C:\NV8 C:\NV9"
set "Liste=%temp%\log-NV.txt"
>"%Liste%" dir /b/a-d %NV%
for /d %%i in ("%HV%\*") do for /f "tokens=2 delims=-" %%a in ("%%~nxi") do (
set "Ordner=%%a"
setlocal enabledelayedexpansion
findstr /ixc:"!Ordner:~1,-1!" "%Liste%">nul || echo rd /s /q "%%i"
endlocal
)
pause
echo
" vor dem "rd
" werden (zum gefahrlosen Testen) die Ordner-Lösch-Befehle nur angezeigt, aber nicht ausgeführt ...@ Endoro
Warum von einer TXT und nicht direkt?
Performancegründe?Grüße
bastla
[Edit] %-Zeichen in Zeile 6 ergänzt [/Edit]
Ungetestet etwa so:
Das funktioniert nicht mit Ordnern, die Leer- oder Sonderzeichen enthalten.
Gruss.
@ECHO OFF &SETLOCAL enableDelayedExpansion
FOR /d %%a IN (C:\NV1\* C:\NV2\* C:\NV3\* C:\NV4\* C:\NV5\* C:\NV6\* C:\NV7\* C:\NV8\* C:\NV9\*) DO SET "$%%~na=%%~na"
FOR /d %%a IN (C:\HV\*) DO FOR /f "tokens=2delims=- " %%b IN ("%%~na") DO IF NOT DEFINED $%%b RD /s /q "%%~a"
Gruss.
Hallo BlattlausOG!
Ich hatte das so verstanden, dass mit Unterordnern der "Nebenverzeichnisse" verglichen werden sollte - wenn es keine gibt, ist natürlich die "TEST-log.txt" (wird in Zeile 6 neu erstellt) leer und damit sind alle Unterverzeichnisse von "_TEST" überflüssig ...
Wenn Du darauf bestehst, können natürlich auch beide Listen erstellt und dann verglichen werden - das sähe dann so aus:
Grüße
bastla
Ich hatte das so verstanden, dass mit Unterordnern der "Nebenverzeichnisse" verglichen werden sollte - wenn es keine gibt, ist natürlich die "TEST-log.txt" (wird in Zeile 6 neu erstellt) leer und damit sind alle Unterverzeichnisse von "_TEST" überflüssig ...
Würden dann noch zu Beginn dieses Scripts die logs vorab erstellt werden, also all-in-one wäre alles PERFEKT. 8)
Es wird, wie erwähnt, die Liste der unmittelbaren Unterordner der "Nebenverzeichnisse" erstellt - für die Unterverzeichnisse des "Hauptverzeichnisses" braucht es keine Liste, da diese direkt ausgewertet werden.Wenn Du darauf bestehst, können natürlich auch beide Listen erstellt und dann verglichen werden - das sähe dann so aus:
@echo off & setlocal
del C:\_SCRIPT-TEST\_TEST\TEST-log.txt
del C:\_SCRIPT-TEST\_TEST\TEST123-log.txt
dir C:\_SCRIPT-TEST\_TEST /A:D /B > C:\_SCRIPT-TEST\_TEST\TEST-log.txt
dir C:\_SCRIPT-TEST\_TEST1 C:\_SCRIPT-TEST\_TEST2 C:\_SCRIPT-TEST\_TEST3 /A:D /B > C:\_SCRIPT-TEST\_TEST\TEST123-log.txt
for /f "usebackq tokens=2 delims=-" %%a in ("C:\_SCRIPT-TEST\_TEST\TEST-log.txt") do (
set "Ordner=%%a"
setlocal enabledelayedexpansion
findstr /ixc:"!Ordner:~1,-1!" "C:\_SCRIPT-TEST\_TEST\TEST123-log.txt" >nul || rd /s /q "%%i"
endlocal
)
bastla
Zitat von @115129:
@Endoro:
Leider besitzen meine Ordnernamen Leerzeichen, somit scheidet dein obiger Code aus.
@Endoro:
Leider besitzen meine Ordnernamen Leerzeichen, somit scheidet dein obiger Code aus.
Ich meinte die Ordner in den Nebenverzeichnissen. Dass die im Hauptverzeichnis spaces haben, ist klar.
Es sind ja nur drei Zeilen. Die erste For-Schleife liest die erste Unterordnerebene jedes NV ein und speichert den Ordnernamen in je einer Variablen. Die beiden nächsten durchsuchen das HV und vergleichen die erste Ebene der Unterordner des HV mit den gespeicherten Variablen der NV. Hat der HV Subordner keine entsprechende NV Variable, wird er gelöscht.
Gruss.
Gruss.
Also wenn ich den Fehler entferne, den du eingebaut hast, gehts:
Gruss.
@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"