Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Relikte einer leicht fehlerhaften Wiederherstellung entfernen per Skript

Frage Microsoft Windows Server

Mitglied: spezpibat

spezpibat (Level 1) - Jetzt verbinden

27.03.2013, aktualisiert 15:18 Uhr, 1319 Aufrufe, 3 Kommentare

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.


Mit freundlichen Grüßen SpezPiBat
Mitglied: bastla
27.03.2013, aktualisiert 03.04.2013
Hallo spezpibat!

Mit einer ewas weniger restriktiven Suche nach "*~*.*~" könnte das etwa so gehen:
01.
@echo off & setlocal 
02.
set "Basis=D:\Testordner" 
03.
set "Maske=*~*.*~" 
04.
set "Log=D:\Log.txt" 
05.
set "Delim=	" 
06.
 
07.
del "%Log%" 2>nul 
08.
for /f "delims=" %%i in ('dir /s/b/a-d "%Basis%\%Maske%" 2^>nul') do ( 
09.
    for /f "tokens=2 delims=~" %%a in ("%%~nxi") do if exist "%%~dpi%%a" >>"%Log%" echo "%%i"%Delim%"%%a" 
10.
)
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
set "Basis=E:"
- also ohne abschließenden "\" - geschrieben werden.

Grüße
bastla
Bitte warten ..
Mitglied: spezpibat
03.04.2013, aktualisiert um 10:13 Uhr
Vielen Dank bastla.

Heute bin ich mal dazu kommen das ganze probehalber durchlaufen zu lassen.
Die "Unschärfe" des RegEx ist wahrscheinlich nicht weiter schlimm, da die Wahrscheinlichkeit niedrig ist, dass ein Nutzer irgendwann mal eine Datei so benannt hat, dass das Muster darauf zutreffen könnte.

Allerdings habe ich beim überfliegen der Ergebnisse das gute alte Umlaut-Problem erkannt.

So wird beispielsweise
1F7UK115~Hochwasserschäden.xls~ in der Logdatei zu 1F7UK115~Hochwassersch„den.xls~
oder
R4H078QR~Aufmaß.pdf~ zu R4H078QR~Aufmaá.pdf~

Kennst du auch dafür eine Lösung?

Wie könnte denn die weitere Verwendung der Logdatei aussehen?
Ich habe zugegebener Maßen mit Batch-Dateien noch nicht viel gescripted, bin aber durchaus daran interessiert meine Kenntnisse in dieser Hinsicht zu erweitern.
Anders als eine Manpage unter Linux gibt allerdings die Hilfe unter Windows leider nicht viel her.
Bitte warten ..
Mitglied: bastla
03.04.2013 um 16:17 Uhr
Hallo spezibat!

Hinsichtlich der Umlaute könntest Du zwar vorweg auf die Codepage 1252 umschalten - also etwa
01.
@echo off & setlocal 
02.
set "Basis=D:\Testordner" 
03.
set "Maske=*~*.*~" 
04.
set "Log=D:\Log.txt" 
05.
set "Delim=	" 
06.
 
07.
for /f "tokens=2 delims=:." %%i in ('chcp') do set /a CP=%%i 
08.
chcp 1252 >nul 
09.
 
10.
del "%Log%" 2>nul 
11.
for /f "delims=" %%i in ('dir /s/b/a-d "%Basis%\%Maske%" 2^>nul') do ( 
12.
    for /f "tokens=2 delims=~" %%a in ("%%~nxi") do if exist "%%~dpi%%a" >>"%Log%" echo "%%i"%Delim%"%%a" 
13.
14.
chcp %CP% >nul
- 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 ...
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 Art
for /f "delims=	" %%i in (D:\Log.txt) do echo del "%%i"
genügen - das "echo" vor dem "del" simuliert dabei zunächst das Löschen, indem der entsprechende Befehl nur angezeigt wird.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Powershell CHAT Skript (5)

Frage von xpxy15 zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...