Relikte einer leicht fehlerhaften Wiederherstellung entfernen per Skript
An alle Helfer, ich würde ein Skript zur Bereinigung von Dateien benötigen.
Die Dateinamen haben eine recht spezielles Muster, daher die Anfrage.
Kurze Vorgeschichte:
Nach einem Hardwareausfall musste ein Backup wieder auf den reparierten Server gespielt werden. Einige Zeit nach dieser Wiederherstellung finde ich nun in immer mehr Ordnern einige Relikte dieser Wiederherstellung.
Damit ist gemeint das in einigen Ordnern Dateien doppelt auftauchen.
Jedoch nicht im eigentlich Sinne doppelt.
richtige Datei:
Dateiname.doc
temporäre (aber noch vorhandene) Datei von Acronis:
Q8MV48DC~Dateiname.doc~
Diese temporären Dateien tauchen unabhängig vom Dateityp (Word, Excel, Jpeg, etc, ...) auf.
In der Masse gerechnet macht das ein ganze Menge temporäre Dateien die eine Menge Speicherplatz fressen aus.
Daher würde ich ein Skript benötigen, welches nach Möglichkeiten mit den Bordmitteln von W2k8 R1 eben diese Dateien findet und löscht.
Grundlegend sollte es so funktionieren:
1. Muster-Suche:
[ALPHANUM]{8,8}~[*]{1,}.DATEIENDUNG~
2. wenn Treffer, dann suche im selben Verzeichnis nach:
[*]{1,}.DATEIENDUNG
3. wenn 1. und 2. Treffer ergeben hat, lösche die Datei die 1. matcht
Da ich mit den Konsolen-Möglichkeiten in Windows nicht so sonderlich erfahren bin, wäre ich für jeden Lösungsansatz und jede Hilfe bei der Skript-Erstellung dankbar.
MfG SpezPiBat
Die Dateinamen haben eine recht spezielles Muster, daher die Anfrage.
Kurze Vorgeschichte:
Nach einem Hardwareausfall musste ein Backup wieder auf den reparierten Server gespielt werden. Einige Zeit nach dieser Wiederherstellung finde ich nun in immer mehr Ordnern einige Relikte dieser Wiederherstellung.
Damit ist gemeint das in einigen Ordnern Dateien doppelt auftauchen.
Jedoch nicht im eigentlich Sinne doppelt.
richtige Datei:
Dateiname.doc
temporäre (aber noch vorhandene) Datei von Acronis:
Q8MV48DC~Dateiname.doc~
Diese temporären Dateien tauchen unabhängig vom Dateityp (Word, Excel, Jpeg, etc, ...) auf.
In der Masse gerechnet macht das ein ganze Menge temporäre Dateien die eine Menge Speicherplatz fressen aus.
Daher würde ich ein Skript benötigen, welches nach Möglichkeiten mit den Bordmitteln von W2k8 R1 eben diese Dateien findet und löscht.
Grundlegend sollte es so funktionieren:
1. Muster-Suche:
[ALPHANUM]{8,8}~[*]{1,}.DATEIENDUNG~
2. wenn Treffer, dann suche im selben Verzeichnis nach:
[*]{1,}.DATEIENDUNG
3. wenn 1. und 2. Treffer ergeben hat, lösche die Datei die 1. matcht
Da ich mit den Konsolen-Möglichkeiten in Windows nicht so sonderlich erfahren bin, wäre ich für jeden Lösungsansatz und jede Hilfe bei der Skript-Erstellung dankbar.
MfG SpezPiBat
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 204044
Url: https://administrator.de/contentid/204044
Ausgedruckt am: 26.11.2024 um 01:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo spezpibat!
Mit einer ewas weniger restriktiven Suche nach "*~*.*~" könnte das etwa so gehen:
Es wird zunächst nur eine Liste (in "D:\Log.txt") aller "passenden" Dateien erstellt. Das in Zeile 5 festgelegte Trennzeichen ist TAB - damit kann diese Liste zB leicht zur Kontrolle in Excel importiert bzw in weiterer Folge mit einem zweiten Batch für das Löschen der unnötigen Dateien verwendet werden.
Falls nicht nur ein Ordner, sondern eine gesamte Partition untersucht werden soll, müssste für zB Laufwerk "E:" die Zeile 2 so
- also ohne abschließenden "\" - geschrieben werden.
Grüße
bastla
Mit einer ewas weniger restriktiven Suche nach "*~*.*~" könnte das etwa so gehen:
@echo off & setlocal
set "Basis=D:\Testordner"
set "Maske=*~*.*~"
set "Log=D:\Log.txt"
set "Delim= "
del "%Log%" 2>nul
for /f "delims=" %%i in ('dir /s/b/a-d "%Basis%\%Maske%" 2^>nul') do (
for /f "tokens=2 delims=~" %%a in ("%%~nxi") do if exist "%%~dpi%%a" >>"%Log%" echo "%%i"%Delim%"%%a"
)
Falls nicht nur ein Ordner, sondern eine gesamte Partition untersucht werden soll, müssste für zB Laufwerk "E:" die Zeile 2 so
set "Basis=E:"
Grüße
bastla
Hallo spezibat!
Hinsichtlich der Umlaute könntest Du zwar vorweg auf die Codepage 1252 umschalten - also etwa
- allerdings sollen die Inhalte der "Log.txt" ohnehin wieder per Batch weiter verarbeitet (also vermutlich gelöscht) werden, sodass sich die Diskrepanz ASCII vs ANSI gar nicht auswirken würde ...
genügen - das "
Grüße
bastla
Hinsichtlich der Umlaute könntest Du zwar vorweg auf die Codepage 1252 umschalten - also etwa
@echo off & setlocal
set "Basis=D:\Testordner"
set "Maske=*~*.*~"
set "Log=D:\Log.txt"
set "Delim= "
for /f "tokens=2 delims=:." %%i in ('chcp') do set /a CP=%%i
chcp 1252 >nul
del "%Log%" 2>nul
for /f "delims=" %%i in ('dir /s/b/a-d "%Basis%\%Maske%" 2^>nul') do (
for /f "tokens=2 delims=~" %%a in ("%%~nxi") do if exist "%%~dpi%%a" >>"%Log%" echo "%%i"%Delim%"%%a"
)
chcp %CP% >nul
Wie könnte denn die weitere Verwendung der Logdatei aussehen?
Wenn Du nur stumpf alle in der "Log.txt" aufgelisteten Dateien löschen wolltest, würde eine Zeile der Artfor /f "delims= " %%i in (D:\Log.txt) do echo del "%%i"
echo
" vor dem "del
" simuliert dabei zunächst das Löschen, indem der entsprechende Befehl nur angezeigt wird.Grüße
bastla