lordraydon
Goto Top

Temporäre Office 2007 Dateien rekursiv löschen

~$*.xlsx und so weiter in einer vorhandenen Ordnerstruktur löschen

Hallo alle Zusammen.

Ich habe ein kleines Problemchen...
Und zwar haben wir bei uns in der Firma eine riesige Ordnerstruktur, die auf einem DFS-System abgelegt ist.
Viele User öffnen und speichern dort massig Office-Dateien, wo es immer wieder vor kommt, dass die Dateien nicht ordnungsgemäß abgespeichert werden. Dadurch sammeln sich in den jeweiligen Ordnern sehr viele temporäre Dateien an, die natürlich auch Speicherplatz weg nehmen.
Ich habe nun schon versucht, die Dateien per Windows-Suche aufzulisten und zu löschen, allerdings findet die Windows-Suche die Dateien nicht. Eine einzelne Datei, kann ich damit suchen und finden, wenn ich den exakten Namen inklusive Dateierweiterung angebe. Ich hingegen möchte aber an einer Stelle einen Platzhalter eingeben, über den ich dann alle Dateien finden kann. (z.B. ~$*.xlsx um alle temporären Excel-Dateien zu finden)
Da dies aber aus irgendeinem Grund nicht funktioniert, habe ich versucht das über die Kommandozeile unter Windows zu machen
del *.tmp /s
Dieser Befehl löscht rekursiv, also im aktuellen Ordner inklusive der Unterordner, alle Dateien mit der Dateierweiterung ".tmp".
Das funktioniert auch soweit, allerdings hier wieder nicht mit den Platzhaltern wie ich es mir vorstelle: "~$*.xlsx"
Ich würde ja auch gerne her gehen und die Dateierweiterung weglassen, aber dies ist nicht möglich, da wir bei uns Programme einsetzen, die auch "~$" Dateien erstellen, die für uns aber von wichtigkeit sind.

Hat vielleicht jemand hier im Forum eine Idee, wie wir diese Dateien einfach löschen können, ohne in den jeweiligen Ordner zu gehen und die per Hand zu löschen???

Ich bin über jede Hilfe dankbar.

Besten Dank und Beste Grüße,
Christian

Content-ID: 105397

Url: https://administrator.de/contentid/105397

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

Biber
Biber 07.01.2009 um 16:55:47 Uhr
Goto Top
Moin lordraydon,

des Rätsels Lösung ist nicht so furchtbar schwierig.
Einige dieser temporären "~$*.xlsx"-Dateien sind "unsichtbar", also haben das Dateiattribut "Hidden".
Deshalb werden sie sowohl vom "normalen" DIR-Befehl wie auch beim DEL-Befehl mit Wildcards ignoriert.
Bei einem "namentlichen" Ansprechen werden sie gefunden, wie Du ja auch geschildert hast.

Abhilfe / Strategie in einem Batch-Zweizeiler:
  • eine Runde für eventuell vorhandene ~$*.xlsx-Dateien mit "Del x:\startordner\~$*.xlsx"
  • für die Dateien mit derselben Wildcard-Namensgebung UND Attribut Hidden
FOR /F "delims=" %%i in ('DIR /s /b /ah x:\startordner\~$*.xlsx') do del "%%i"  

Probiere vorher mal als proof-of-concept am CMD-Prompt ein
FOR /F "delims=" %i in ('DIR /s /b /ah x:\startordner\~$*.xlsx') do @echo del "%i"

Grüße
Biber
lordraydon
lordraydon 07.01.2009 um 17:59:18 Uhr
Goto Top
Hallo Biber,

Habe das eben mit einem Testordner bei mir auf der Festplatte getestet und habe leider folgende Fehlermeldung bekommen :
C:\Users\cra\Desktop\test>dir
 Datenträger in Laufwerk C: ist SW_Preload
 Volumeseriennummer: CE3D-BE1F

 Verzeichnis von C:\Users\cra\Desktop\test

07.01.2009  17:53    <DIR>          .
07.01.2009  17:53    <DIR>          ..
07.01.2009  17:55                93 batch.cmd
06.01.2009  17:59    <DIR>          Neuer Ordner
               1 Datei(en),             93 Bytes
               3 Verzeichnis(se), 137.967.935.488 Bytes frei

C:\Users\cra\Desktop\test>batch.cmd
"\Users\cra\Desktop\test\~$*.xlsx')" kann syntaktisch an dieser Stelle nicht ver  
arbeitet werden.

C:\Users\cra\Desktop\test>FOR /F "delims=" \Users\cra\Desktop\test\~$*.xlsx') do  
 @echo del "i"  
C:\Users\cra\Desktop\test>

Kannst du mir mal irgendwie erläutern, was dieser Befehl genau macht und für was die einzelnen Attribute stehen??

Besten Dank für deine schnelle Hilfe,
Christian

[EDIT]

Inhalt der Bacht.cmd ist
FOR /F "delims=" %i in ('DIR /s /b /ah C:\Users\cra\Desktop\test\~$*.xlsx') do @echo del "%i"  
Biber
Biber 07.01.2009 um 18:16:52 Uhr
Goto Top
Moin lordraydon,

CMD-Befehle (unter anderem FOR-Anweisungen) lassen sich als Einzelanweisungen direkt vom CMD-Prompt aus abfeuern ODER als Batchdatei (Endung *.cmd oder *.bat) als Mehrere-Anweisungen-in-einem-Rutsch ausführen.

Die dynamischen FOR-Variablen %i, %j usw. werden am CMD-Prompt mit einem Prozentzeichen (%i) geschrieben, in Batchdateien mit zwei Prozentzeichen (%%i, %%j, ...)
Daher Dein Syntaxfehler. Verdoppele die %-Zeichen in Deiner Bacht.cmd.

[am Cmd-Prompt]
FOR /F "delims=" %i in ('DIR /s /b /ah C:\Users\cra\Desktop\test\~$*.xlsx') do @echo del "%i"
[in einer .cmd-/.bat-Batchdatei:]
FOR /F "delims=" %%i in ('DIR /s /b /ah C:\Users\cra\Desktop\test\~$*.xlsx') do @echo del "%%i"

Der Befehl
  • führt ein DIR-Kommando aus auf die Wildcards "~$*.xlsx" im angegebenen Verzeichnis
  • und bezogen nur auf die Dateien mit Attribut Hidden (Schalter "-ah")
  • die gefundenen Dateien werden einzeln angefasst durch die FOR /F-Anweisung
  • "delims=" bewirkt die ordnungsgemäße Verarbeitung auch von Ordnern/Dateien mit "Leerzeichen im Namen"
  • diese Dateinamen werden an das do @echo del "%%i" übergeben.

Versuche es erstmal so weit und poste dann eventuelle Restfragen.

Grüße
Biber
lordraydon
lordraydon 07.01.2009 um 18:31:31 Uhr
Goto Top
Hallo Biber,

Erstmal vielen Dank für deine schnelle und gute Hilfe.
Mein vollstes Respekt, für deine Kenntnisse in der Kommandozeilen-Umgebung von Windows.

Ergebnis der Batch sieht nun folgendermaßen aus:
C:\Users\cra\Desktop\test>dir
 Datenträger in Laufwerk C: ist SW_Preload
 Volumeseriennummer: CE3D-BE1F

 Verzeichnis von C:\Users\cra\Desktop\test

07.01.2009  17:53    <DIR>          .
07.01.2009  17:53    <DIR>          ..
07.01.2009  18:25                95 batch.cmd
06.01.2009  17:59    <DIR>          Neuer Ordner
               1 Datei(en),             95 Bytes
               3 Verzeichnis(se), 137.968.070.656 Bytes frei

C:\Users\cra\Desktop\test>batch.cmd

C:\Users\cra\Desktop\test>FOR /F "delims=" %i in ('DIR /s /b /ah C:\Users\cra\De  
sktop\test\~$*.xlsx') do @echo del "%i"  
del "C:\Users\cra\Desktop\test\~$test - Kopie (2).xlsx"  
del "C:\Users\cra\Desktop\test\~$test - Kopie.xlsx"  
del "C:\Users\cra\Desktop\test\Neuer Ordner\~$test - Kopie (4).xlsx"  
del "C:\Users\cra\Desktop\test\Neuer Ordner\Neuer Ordner\~$test - Kopie (3).xlsx  
"  

C:\Users\cra\Desktop\test>

Werde das nun noch auf dem DFS mit ein paar Testdateien versuchen, bevor ich es wirklich auf die "echten" Dateien loslasse ;)

Werde die Ergebnisse bis Ende der Woche dann hier veröffentlichen.

Nochmals vielen dank und beste Grüße,
Christian
lordraydon
lordraydon 07.01.2009 um 18:51:51 Uhr
Goto Top
Hallo Biber,

Ich habe doch noch ein kleines Problem... Zumindest hoffe ich das es klein ist^^

Und zwar sind auf dem Server anscheinend die Pfade etwas zu lang, weswegen die Kommandozeile folgende Fehlermeldung ausgibt:
Der Verzeichnisname ******************* ist zu lang.

Ich schätze mal, dass er dann in diesen Verzeichnissen den Befehl anwenden kann.
Kann ich das irgendwie umgehen, oder ist die Kommandozeile an diese Stelle schlicht weg zu "schwach" auf der Brust???

Vielen Dank und noch einen schönen Abend,
Christian
Biber
Biber 07.01.2009 um 19:08:10 Uhr
Goto Top
Moin lordraydon,

nein, das ist kein CMD.exe-spezifischer Schwachpunkt, sondern ein allgemeines Redmonder Praktikanten-und-Pfadlängen-Problem.
Diese PraktikantInnen konnten sich damals nichts vorstellen, was länger sein kann als 254 mm oder Zeichen.
Und ziemlich alle M$-Anwendungen werden auch noch bei soooooooooo langen Datei/Verzeichnis-Namen die Grätsche machen, wenn ein Windows-Betriebssystem mit einer Versionsnummer 35.x auf den Markt geworfen wird.

In diesem Fall kannst Du den Pfad z.B. über einer Subst- oder ein Net use-Kommando verkürzen.
Beispiele sind auch hier im Forum zu finden[Forumssuche "Pfadlänge"].
Deshalb nur angedeutet:
net use z: "\\einServer\einShare\Users\cra\Desktop\test\Neuer Ordner\Neuer Ordner"
-oder-
subst z: "C.\Users\cra\Desktop\test\Neuer Ordner\Neuer Ordner"

--> dann kannst Du so einen RattenschAwanz wie "...\Users\cra\Desktop\test\Neuer Ordner\Neuer Ordner" als Laufwerk Z: ansprechen.
[ das "A" in RattenschAwanz ist kein Tippfehler. sondern ein Unterlaufen der Forumsregeln. Sonst würde angezeigt. "Rattenschwanz" ]

Grüße
Biber
lordraydon
lordraydon 07.01.2009 um 19:32:07 Uhr
Goto Top
Hallo Biber,

Auch hier nochmals "Danke"... Dann werde ich die Ergebnisse der Batch-Datei mit "batch.cmd >> log.txt" zwischenspeichern. Somit kann ich ja sehen, welche Verzeichnisse definitiv zu lang sind und kann dann her gehen, mir ein Netzlaufwerk anlegen, das zu den "fehlenden" Pfaden verweist und dort nochmals die Batch ansetzen lassen.

Teste das weiterhin und melde mich dann wieder.

Vielen Dank für die ganze Hilfe und dann einen schönen Abend,
Christian
lordraydon
lordraydon 13.01.2009 um 11:16:46 Uhr
Goto Top
Hallo Biber,

Ich habe das Ganze nun mit zwei verschiedenen Batch-Files gelöst...

Hier die erste:
@CLS
@COLOR A5
@echo Wonach soll ich suchen?
@set /p sSuche=Eingabe:
@echo Wo soll ich suchen?
@set /p sPfad=Eingabe:
@echo Soll  ich wirklich in und unterhalb von %sPfad% nach %sSuche% suchen???
@PAUSE
@echo Es wird nach %sSuche% in und unterhalb von %sPfad% gesucht! >> log.txt
@FOR /F "delims=" %%i in ('DIR /s /b /ah "%sPfad%%sSuche%"') do @echo del "%%i" >> log.txt  
@COLOR 07
@echo Die Suche ist nun Fertig.
@PAUSE

Und in der zweiten wird aus
´@FOR /F "delims=" %%i in ('DIR /s /b /ah "%sPfad%%sSuche%"') do @echo del "%%i" >> log.txt  
´@FOR /F "delims=" %%i in ('DIR /s /b /ah "%sPfad%%sSuche%"') do del "%%i" >> log.txt  

Das ganze hat super funktioniert und läuft nun auch als geplanter Task auf den Servern, damit garnicht erst der Datenmüll aufläuft ;)

Habe das auch noch ein wenig abgewandelt, dass wir das Skript variabel an verschiedenen Orten mit verschiedenen Suchkriterien laufen lassen können face-smile *Ganz stolz auf mich bin*

An dieser Stelle nochmals vielen Dank für deine Hilfe und dem Know-How, das du hier aufbringst.
Christian
lordraydon
lordraydon 13.01.2009 um 13:59:55 Uhr
Goto Top
Hallo Biber,

Ich schon wieder^^

Ich habe nun doch noch ein Problemchen...
Habe nun wie in meinem letzten Kommentar beschrieben, das @echo weggelasssen.
Leider löscht er die Dateien nun aber nicht, sondern gibt die Datei an und sagt, dass er diese Datei nicht finden kann... kann das an dieser Stelle wieder irgendwie daran liegen, dass die Dateien versteckt sind???

Danke für deine Hile.

Beste Grüße,
Christian
Biber
Biber 15.01.2009 um 18:24:12 Uhr
Goto Top
Moin lordraydon,

sorry, die Antwort hat etwas gedauert...

Normalerweise sind "hidden files" immer nur insofern "unsichtbar, dass sie sicht nicht mit Wildcard-Befehlen erwischen lassen.
Also nicht mit einem "DIR *.* " oder "DEL *.*" oder ähnlichem.
Werden die Dateien explizit (namentlich) angefasst und angesprochen, verhalten sie sich wie alles Sichtbare, was man/frau so in die Finger bekommt.

Daran sollte es also nicht liegen.

Leider löscht er die Dateien nun aber nicht, sondern gibt die Datei an und sagt, dass er diese Datei nicht finden kann...
kann das an dieser Stelle wieder irgendwie daran liegen, dass die Dateien versteckt sind???

Also--> Merk Dir Pfad und Namen einer dieser Dateien... (ggf. vom Bildschirm Copy&Pasten) und
... schau was passiert, wenn Du mit einem
DIR pfad\nameDerNichtGefundenenDatei.xyz
draufgehst... also ob da die gleiche Fehlermeldung kommt
... und falls ja, dann prüfe, was dieser Befehl anzeigt:
Attrib pfad\nameDerNichtGefundenenDatei.xyz

Dann schauen wir weiter.

Grüße
Biber