cyberdevil0815
Goto Top

Batch Datei um Ordner zu suchen und Inhalt löschen

Batch im Netzwerk verwenden.

Bestimmte Ordner suchen und deren Inhalt löschen

Hallo zusammen,

folgendes Problem.

Wir arbeiten mit Autodesl Inventor 2010, welches von jedem Bauteil in einer definierten Ordnerstruktur, Sicherungskopien anlegt.

Die Sicherungsdatein befindem sich im Netzwerk und nicht lokal.

Da eine Maschine, als Beispiel aus mehreren Bauteilen besteht, habe ich entsprechend verschiedene Ordner:

Beispiel:

\\Netzlaufwerk\Haputordner\Projekt\Auto\Karosserie\Backup
\\Netzlaufwerk\Haputordner\Projekt\Auto\Motor\Backup
\\Netzlaufwerk\Haputordner\Projekt\Auto\Auspuff\Backup
\\Netzlaufwerk\Haputordner\Projekt\Auto\Getriebe\Backup

Ich möchte gerne einen Batch schreiben, welcher NUR den Ordner "BACKUP" sucht (auf einem Netzlaufwerk, und NUR den Inhalt löscht.

Angefangen habe ich hiermit, komme aber nicht weiter, da Syntax falsch

for %I IN (I:\\dat1002\m-kon\*) DO echo del %I\Old Versions\*.bak

Zur Definition:

I ==> Netzwerkpfad
\\dat1002\m-kon ==> Freigegebenes Verzeichnis
Old Versions ==> der zu suchende Ordner


Syntax ist falsch und ich häng, jemand eine Idee?

Content-ID: 170812

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

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

60730
60730 02.08.2011 um 14:36:37 Uhr
Goto Top
Moin,

  • Batch macht genau dass, was du Ihm vorschreibst.

\\Netzlaufwerk\Haputordner\Projekt\Auto\Karosserie\Backup
ist also schonmal ganz daneben face-wink Hauptordner?

Ich möchte gerne einen Batch schreiben, welcher NUR den Ordner "BACKUP" sucht
DO echo del %I\Old Versions\*.bak

passt auch nicht wirklich zusammen...

unhybsche variante:

for /r \\Netzlaufwerk\Hauptordner\Projekt\ %a in (.bak) do @echo %~dpa|find /I "BACKUP" && @echo del %~dpa\*.*

Spiel damit mal etwas herum

  • FOR /?

Gruß
Skyemugen
Skyemugen 02.08.2011 um 14:53:13 Uhr
Goto Top
Aloha T-Mo,

hm, da %~dpa bereits einen Backslash enthält, wird der doppelte u.U. Probleme bereiten face-wink XP kann das, glaube ich, ab aber Win 7 muckt dort.

Lustig finde ich auch, dass deine Variante
@for /r "E:\Skripte" %a in (.bak) do @echo %~dpa|find /I "BACKUP" && @echo del %~dpa\*.*
länger dauert als diese:
@for /f "delims=" %s in ('dir /ad /b /s "E:\Skripte"^|findstr /i /e "\Backup"') do @for /f "delims=" %m in ('dir /a-d /b /s "%~s\*.bak"') do @echo del "%~m"

Habe ich mal auf meine Verzeichnisse angepasst, weil mich mal die Ablaufzeit interessiert hat ^_^

greetz André
60730
60730 02.08.2011 um 15:07:15 Uhr
Goto Top
Salve André,

nunja - ich bin grade erst aus dem Urlaub und auf die Arktischen Temperaturen knapp der 30° hab ich mich noch nicht eingestellt face-wink

  • ich schrub ja unhybsch, wobei man ein minimales Tuning auch durch (.) statt (.cmd) erreichen kann.
Der kaspert halt alles durch und das nicht nur einmal...

for /r E:\Skripte %a in (.) do @echo %~dpa

Da kommt ja "der" Ordner, (ein .), der Übergeordnete Ordner (zwei..) und evtl unterordner.

Du weißt ja, manchmal aber nur manchmal ist der kürzeste Gedankenweg der längere face-wink

Gruß


edit

wobei der da
for /r E:\Skripte %a in (. ) do @echo %~dpa
nochmal etwas schneller wäre, aber genausoviele Treffer hat?
Ich vermute, der Biber hat den kühleren Kopf und kommt heute im laufe des Tages aus seinem Bau geschwommen und erklärt uns das genauer face-wink
</edit>
cyberdevil0815
cyberdevil0815 02.08.2011 um 15:36:56 Uhr
Goto Top
Hallo zusammen,

vielen Dank für den Response, man sieht den Wald ja nicht immer, wenn die Bäume im Weg sind. Und bei diesen ungewohnten Temperaturen, weiss ich gar nicht, was ich machen soll....face-wink

Scherz beiseite, ich habe die Sache nun so gelöst, und siehe da, das funktioniert:

REM G: --> Netzwerkpfad angeben
G:
cd "G:\"
FOR /F "tokens=*" %%G IN ('DIR /B /AD /S *OldVersions*') DO del/S /Q "%%G"
REM pause

Wie geschrieben, ich habe mein Ergebniss oder mein Ziel erreicht, dass kann m an bestimmt noch besser lösen?!
bastla
bastla 02.08.2011 um 16:48:53 Uhr
Goto Top
@cyberdevil0815
Eigentlich sollte
FOR /F "tokens=*" %%G IN ('DIR /B /AD /S G:\OldVersions') DO del /S /Q "%%G"
genügen - Du suchst ja nicht nach Ordnern, in deren Namen "OldVersions" nur enthalten ist...
Übrigens: Wenn schon "cd", dann aber gleich "cd /d G:\" ...
@Skyemugen
Wenn Du schon am Testen bist: Wie wäre es mit
@for /f "delims=" %s in ('dir /ad /b /s "E:\Skripte\Backup') do del /q "%~s\*.bak" 2>nul
BTW: Ich war etwas überrascht, dass
findstr /i /e "\Backup"
genügt - ich hätte sicherheitshalber
findstr /i /e "\\Backup"
verwendet (Stichwort "escapen") ...

Grüße
bastla
60730
60730 02.08.2011 um 20:06:13 Uhr
Goto Top
moin Mädelz,

das hat mir keine Ruhe gelassen...

C:\>dir e:\test
 Datenträger in Laufwerk E: ist Volume
 Volumeseriennummer: xyz

 Verzeichnis von e:\test

02.08.2011  19:57    <DIR>          .
02.08.2011  19:57    <DIR>          ..
02.08.2011  19:53    <DIR>          1Backup
02.08.2011  19:53    <DIR>          Kopie (2) von 1Backup
02.08.2011  19:56    <DIR>          Kopie (2) von Neuer Ordner
02.08.2011  19:53    <DIR>          Kopie (3) von 1Backup
02.08.2011  19:56    <DIR>          Kopie (3) von Neuer Ordner
02.08.2011  19:53    <DIR>          Kopie (4) von 1Backup
02.08.2011  19:56    <DIR>          Kopie (4) von Neuer Ordner
02.08.2011  19:53    <DIR>          Kopie (5) von 1Backup
02.08.2011  19:56    <DIR>          Kopie (5) von Neuer Ordner
02.08.2011  19:53    <DIR>          Kopie (6) von 1Backup
02.08.2011  19:56    <DIR>          Kopie (6) von Neuer Ordner
02.08.2011  19:53    <DIR>          Kopie (7) von 1Backup
02.08.2011  19:56    <DIR>          Kopie (7) von Neuer Ordner
02.08.2011  19:53    <DIR>          Kopie von 1Backup
02.08.2011  19:56    <DIR>          Kopie von Neuer Ordner
02.08.2011  19:56    <DIR>          Neuer Ordner
               0 Datei(en)              0 Bytes
              18 Verzeichnis(se), 13.971.251.200 Bytes frei

C:\>

C:\>for /d  %a in (e:\test\*Backup) do echo %a

C:\>echo e:\test\1Backup
e:\test\1Backup

C:\>echo e:\test\Kopie (2) von 1Backup
e:\test\Kopie (2) von 1Backup

C:\>echo e:\test\Kopie (3) von 1Backup
e:\test\Kopie (3) von 1Backup

C:\>echo e:\test\Kopie (4) von 1Backup
e:\test\Kopie (4) von 1Backup

C:\>echo e:\test\Kopie (5) von 1Backup
e:\test\Kopie (5) von 1Backup

C:\>echo e:\test\Kopie (6) von 1Backup
e:\test\Kopie (6) von 1Backup

C:\>echo e:\test\Kopie (7) von 1Backup
e:\test\Kopie (7) von 1Backup

C:\>echo e:\test\Kopie von 1Backup
e:\test\Kopie von 1Backup

C:\>

btw: der da
FOR /F "tokens=*" %G IN ('DIR /B /AD /S *Backup*') DO echo "%G"
läuft geschätzt noch länger, als mein erster Schnellschuss, baut aber massenweise Fehler ...
(anderer Rechner, als heute Mittag, mit einer 1 TB Platte E, auf der ziemlich "böse" Dateien bzw. wilde Ordnernamen liegen - mein WAIK Builder)

Gruß
bastla
bastla 02.08.2011 um 20:14:22 Uhr
Goto Top
Hallo T-Mo!

Auch an Dich die Frage: Wozu "*Backup*", wenn die fraglchen Ordner doch nur "Backup" heißen sollen?

Hast Du übrigens schon mal "for /d /r" in Kombination versucht (es ging ja schließlich um Unter-Unterordner)?

Grüße
bastla
60730
60730 02.08.2011 um 22:25:08 Uhr
Goto Top
Zitat von @bastla:
Hallo T-Mo!
aloha Bastla face-wink

Auch an Dich die Frage: Wozu "*Backup*", wenn die fraglchen Ordner doch nur "Backup" heißen sollen?
Weil ich ausnahmsweise eine Winblows Kiste @home hab und mir der for /?
FOR /D %Variable IN (Satz) DO Befehl [Parameter]
Wenn der Satz Platzhalter enthält, dann bezieht sich der FOR-Befehl
auf Verzeichnisse und nicht auf Dateien.
das Unterschieben eines Platzhalters irgendwo im Satz suggeriert hat (funktioniert offensichtlich aber auch ohne)

Hast Du übrigens schon mal "for /d /r" in Kombination versucht (es ging ja schließlich um Unter-Unterordner)?
Jetzt nicht aktuell für den Fred ;-( ist ja eh schon gelöst

Grüße
bastla

retour
Skyemugen
Skyemugen 03.08.2011 um 08:55:52 Uhr
Goto Top
Zitat von @bastla:
BTW: Ich war etwas überrascht, dass
findstr /i /e "\Backup"
genügt - ich hätte sicherheitshalber
findstr /i /e "\\Backup"
verwendet (Stichwort "escapen") ...

Aloha Bastla,

nun, stimmt - ist ja ähnlich dem Phänomen, was ich ja T-Mo auch schon anfangs sagte: XP kommt damit klar, Win 7 muckt rum (gut, Win 7 habe ich es gestern nicht mehr getestet zu Hause, auf Arbeit fahr ich mit XP)

greetz André

P.S.: Klar geht dein Code schneller voran (auch wenn ich aufgrund meiner Struktur dennoch das findstr einbauen muss, sonst erfasst er nämlich auch die Unterordner von Backup, was nicht sein soll ^_^ wenn ich die fehlenden zweiten Zollzeichen hinzufüge face-wink
bastla
bastla 03.08.2011 um 11:00:14 Uhr
Goto Top
@Skyemugen
Weshalb sollten Unterordner erfasst werden, wenn per "dir" konkret nach Ordnern namens "Backup" gesucht und dann nur im jeweiligen Ordner (auf Verdacht) "*.bak" gelöscht wird?

Grüße
bastla
Skyemugen
Skyemugen 03.08.2011 um 11:17:15 Uhr
Goto Top
Aloha bastla,

ganz einfach: Weil dies mein Test mit meinen Bedingungen war und das Topic hier nur als „Mensch, mal gucken, wie schnell es abläuft, wenn ...” diente *fg* face-wink

Da ich selbst nämlich auch die Inventor Suite 2010 nutze und derartige bzw. ähnliche Backupanordnungen habe, jedoch mit weiteren Unterordnern, sprich: Backup\Inventor und auch Backup\AutoCAD - wobei eben auch aufgrund einer älteren nebenbeibenutzen ACAD-Version eben .bak-Dateien einfach nur im Backup-Verzeichnis liegen, die jedoch nur unwichtig sind und daher gelöscht werden können - darf in meinem Fall/Test eben kein Unterordner mit einbezogen werden, darum auch die Suche nach \Backup mit /e-Schalter Da ich immer zu faul bin, erst nach den richtigen Pfaden zu suchen, leg' ich mir irgendwelche Ordner als temporäre Ablage mit leeren .txt im Skriptverzeichnis an, wo ich dann die Ordner immer wieder umbenennen kann und die Endungen der Dateien ändern lasse, einfach, um nicht ständig beim c&p vergesse, es umzuändern haha.

Klingt umständlich aber jeder hat so seine Macken :P

greetz André
bastla
bastla 03.08.2011 um 11:22:39 Uhr
Goto Top
Hallo Skyemugen!

Ja, aber die Prüfung, ob der Ordner "Backup" heißt und am Ende des Pfades steht, fällt flach,wenn Du mit
dir /s /b /ad "E:\Skripte\Backup"
nur nach genau solchen Ordnern suchst - ein "E:\Skripte\Test\Backup\AutoCAD" bekommst Du gar nicht erst als Ergebnis ...

Grüße
bastla
Skyemugen
Skyemugen 03.08.2011 um 11:37:38 Uhr
Goto Top
Aloha bastla,

äh, ja, stimmt, du hast ja den Ordner direkt angegeben *pfeif* Meinereiner nicht, (also nur E:\Skripte) weil ich widerum den code nahe am EP halten wollte, wo der Endordner nicht angegeben werden kann/soll, sondern im dir aufgelistet ist/wird.
Desweiteren war meine Verzeichnisdarstellung nur als verkürztes Beispiel gedacht, der Ordnername der Programme selber beinhaltet ebenso das Wort Backup ^_^ Backup\Backup AutoCAD bei dem Vermischen, hätte ich Barkeeper/Cocktailmixer an der Bar werden sollen, höhö

Aber gut, genug vom herumtüftelndem Offtopic, man verwirrt ja am Ende doch nur alle Leser *gg*

greetz André
bastla
bastla 03.08.2011 um 11:41:48 Uhr
Goto Top
Hallo Skyemugen!
wo der Endordner nicht angegeben werden kann/soll, sondern im dir aufgelistet ist/wird.
... hätte ich zumindest dem Eröffnungskommentar nicht entnommen, und auch bei einem "*Backup*" wäre ein Ergebnis "E:\Skripte\Test\Backup\AutoCAD" nicht möglich ("E:\Skripte\Test\Backup_old\AutoCAD" aber natürlich sehr wohl) ...

Grüße
bastla
Skyemugen
Skyemugen 03.08.2011 um 11:49:14 Uhr
Goto Top
Aloha bastla,

du hast wohl schon geschrieben, als ich noch editiert habe face-wink (5 Minuten working on progress muss man bei mir immer addieren) [in Sachen Pfad mit Backup]

Nun, ich ging im EP von
\\Netzlaufwerk\Haputordner\Projekt\Auto\Karosserie\Backup
\\Netzlaufwerk\Haputordner\Projekt\Auto\Motor\Backup
\\Netzlaufwerk\Haputordner\Projekt\Auto\Auspuff\Backup
\\Netzlaufwerk\Haputordner\Projekt\Auto\Getriebe\Backup

aus, wo ich den Endordner ja nicht direkt angeben kann, da die Elternverzeichnisse sich ja unterscheiden face-wink

Glaube, nächstes Mal separiere ich besser Test und Topic, das verwirrt dann weniger ^_^

greetz André
bastla
bastla 03.08.2011 um 11:54:59 Uhr
Goto Top
Hallo Skyemugen!

Für Deine genannten Beispiele würden
dir /s /b /ad \\Netzlaufwerk\Haputordner\Backup
aber natürlich auch (mit entsprechend größerer Einschränkung)
dir /s /b /ad \\Netzlaufwerk\Haputordner\Projekt\Auto\Backup
funktionieren - es wird beim Suchen nämlich der Pfad bis auf den letzten Bestandteil als "Startordner" interpretiert und von dort beginnend werden alle dem letzten Teil (also "Backup") entsprechenden Dateien (bzw hier: Ordner) gesucht ...

Grüße
bastla
Skyemugen
Skyemugen 03.08.2011 um 11:59:38 Uhr
Goto Top
Aloha bastla,

ah ja, stimmt, du hattest schon einmal einen derartigen Code geschrieben, hatte mich damals gewundert und gedacht: Muss ich mir merken.
Nunja, da dieses Verarbeiten für mich bis heute nicht 100% logisch erscheint, habe ich es wohl wieder vergessen.
Für mich muss immer etwas platzhaltendes hin, wenn ich etwas unbekanntes habe, diese Logik à la:

zwischen \ und sichselbst könnte noch \ und \ sein

geht mir einfach nicht wirklich in den Schädel face-wink

Muss ich mir wirklich mal einprägen, vereinfacht ja u.U. doch einiges ... aber kann bestimmt auch mal für Probleme sorgen ^_^

greetz André
bastla
bastla 03.08.2011 um 12:20:56 Uhr
Goto Top
Hallo Skyemugen!
aber kann bestimmt auch mal für Probleme sorgen ^_^
Wenn, dann aber nur mit "dir /s" ... face-wink

Grüße
bastla
cyberdevil0815
cyberdevil0815 03.08.2011 um 13:21:13 Uhr
Goto Top
So jetzt wirll ich aber auch nochmal kurz meine Senf dazu geben.

Erst einmal vielen Dank für sämtlichen Response und die gegebenen Hilfestellungen.

@skyemugen...ich brauch das eigentlich für genau den Fall, welchen Du beschrieben hast. Wir haben Inventor Suie im Einsatz, und die Backup Ordner bzw. bei Inventor "OldVersion" genannt, sind derart auf den Netzwerk zugelaufen, dass diese zwingend und dringend entrümpelt werden müssen.

Dies gilt bei uns für die Dateitypen:
*.sav*.ac$ (AutoCAD temporäre Sicherung, sind ein paar Reste aus den Jahren bis 2004)
*.bak (AutoCAD Sicherung)
acad.err (AutoCAD Fehlerprotokoll)
acad*.dmp (AutoCAD Absturzdump)
AdLMErr.txt (AutoCAD ErrorLog)
*.stp (STEP-Files von externen 3D-Modellen, die vom Inventor in sein eigenes Format *.ipt oder *.iam gewandelt wird)
*.step (STEP-Files von externen 3D-Modellen, die vom Inventor in sein eigenes Format *.ipt oder *.iam gewandelt wird)
*.step.zip (STEP-Files von externen 3D-Modellen, die vom Inventor in sein eigenes Format *.ipt oder *.iam gewandelt wird)
*.igs (IGES-Files von externen 3D-Modellen, die aus Inventor generiert wurden bzw wie STEP von extern kommend)
*.sat

Und wie das nun mal so ist, haben sich in den letzten 8 Jahren Daten angesammelt in Höhe von 47 Gigabyte, welche ich gestern durch den "kleinen" Batch mal eben schnell gefunden, gesichert und vom Dateiserver Löschen konnte.

An dieser Stelle nochmals vielen Dank, für eine hohe Zeiteinsparung!!!
Skyemugen
Skyemugen 03.08.2011 um 13:56:41 Uhr
Goto Top
Aloha,

Hmm...

vergiss nicht nach *.dwl zu suchen (was dann auch *.dwl2 einschließt), diese temp. Zugriffsdateien, die manchmal nicht gelöscht werden, sind auch unnütz face-wink

greetz André
cyberdevil0815
cyberdevil0815 09.08.2011 um 14:49:31 Uhr
Goto Top
@Skyemugen
Wofür sollen diese Dateiendung stehen? Bzw. was speichern diese ab?

Ich lese ein wenig Ironie aus deinem Posting heraus, dies kann ich ggf. aber auch misinterpretieren....
Skyemugen
Skyemugen 09.08.2011 um 15:08:03 Uhr
Goto Top
Aloha,

noch nie aufgefallen, dass z.B. beim Offenhaben von Zeichnungsdateien, AutoCAD (zumindest, Inventor verkneift sich, glaube ich, derartige Sachen) temporäre Zugriffsdateien anlegt, die jedoch manchmal nicht ganz so temporär bleiben?

Achja, dafür würdest du auch den Schalter /ah benötigen, da diese versteckt sind.

greetz André
cyberdevil0815
cyberdevil0815 09.08.2011 um 15:48:53 Uhr
Goto Top
Prinzipiell machen Backupdaten ja schon Sinn. Da wir aber komplett auf Vault for Workgroups bzw. prof. wechseln wollen, bereinigen wir uns erst einmal von unserem Datenmüll, welcher min. explizit bei den OldVersion Dateien seit mehr als 8 Jahren NICHT mehr angefasst worden sind, und einfach brach auf den Workstations und Serverlaufwerk liegen.

Bei Revisions/Versionsänderung wird, wieso auch immer, ich bin ja kein Konstrukteur, das gesamte Modell und/oder Bauteil unter einem neuen Namen gespeichert bzw. es wird manuell um einen Index als Kopie erhöht. Das es sich um eine Kopie des Grundmodelles handelt, und diese Kopie mit den Änderungen gespickt wird, brauche ich diese OldVersion Dateien einfach nicht mehr.,
Skyemugen
Skyemugen 09.08.2011 um 16:01:06 Uhr
Goto Top
Zitat von @cyberdevil0815:
Bei Revisions/Versionsänderung wird, wieso auch immer, ich bin ja kein Konstrukteur, das gesamte Modell und/oder Bauteil unter einem neuen Namen gespeichert

Ist auch das Sinnvollste, stell dir mal vor, man möchte wieder den Zustand 2 und ist jetzt bei 7 *pfeif* das habe ich hier am laufenden Band, Forschung & Entwicklung eben ;D
Da ist es nun einmal das Einfachste, das komplette Teil von vor X wieder griffbereit zu haben, statt einzelne (Rück-)Zustände wieder in das aktuelle Bauteil einzupflegen.