2017-11-16 1 views
0

Ich versuche, Batch-Datei zu erstellen, die die folgenden tun:Batch-Datei-Ordner zu löschen, wenn sie bestimmte Datei enthält

  1. Es durch alle Unterordner in bestimmten Verzeichnis für bestimmte Datei scannen.
  2. Wenn Datei in Unterordner gefunden wird, werden alle Inhalte von dieser Unterordner und Unterordner selbst gelöscht.

Zum Beispiel kann die Datei, die ich suche ist „test.txt“ und Hauptordner ist „C: \ Test“ mit folgenden Struktur:

\A 
\B with test.txt 
\C 
\C\C0 
\C\C1 
\C\C2 with test.txt 
\D 
\D\D0 
\D\D1 with test.txt 
\D\D1\D10 
\D\D1\D11 

Jeder Ordner einige andere zufälligen Dateien hat in es.

In diesem Beispiel Skript sollte folgende Ordner löschen und alle ihre Inhalte:

C:\Test\B 
C:\Test\C\C2 
C:\Test\D\D1 

ich verschiedene Scripts versucht, aber ohne Erfolg.

erster Skript, das ich geprüft ist: Batch-Datei wird direkt in "\ Test \ C": platziert

for /R %%f in (test.txt) do @IF EXIST %%f @echo "%%f" 

Es richtig einzigen Weg, um Ordner mit text.txt innen aufgeführt. Weil es funktionierte, habe ich versucht, auf folgende Arten nur Dateien für den Test zu löschen:

for /R %%f in (test.txt) do @IF EXIST %%f del /q /s /f "*.*" 

Es gelöscht alle Dateien im Hauptordner und alle Unterordner in die Batch-Datei ist, zusammen mit Batch-Datei selbst.

Ich habe versucht, dann mehrere andere Skripte zu bearbeiten, um meine Bedingungen zu erfüllen, aber die Ergebnisse waren offensichtlich. Das Letzte, was ich schaffen konnte ist:

for /R %%p in (test.txt) do @IF EXIST %%p (rd "%%p" /s || del "*.*" /s/f) 

I ommited hier „/ q“ Parameter der Lage sein, zu sehen, was es löschen will. Es findet zuerst die Datei "text.txt" richtig. Wenn "y" ausgewählt ist, um diese Datei zu löschen, gibt das Skript den Fehler aus, dass es sich nicht um den richtigen Ordner handelt. Dann beginnt es Dateien aus dem Hauptordner und allen Unterordnern zu löschen, wobei die Batch-Datei das erste Opfer ist (es fragt jedes Mal, ob ich Dateien in einem bestimmten Unterordner löschen möchte). Unterordner werden nicht gelöscht, nur ihre Inhalte.

Ich habe keine Ideen mehr.

+0

Sie könnten https://ss64.com/nt/syntax-args.html von Interesse finden ... –

Antwort

0

Wenn das Problem zu schwierig zu lösen scheint, teilen Sie es in zwei auf.

1) Liste der Verzeichnisstruktur in eine temporäre Textdatei, eine pro Zeile:

dir /ad /b /s %1 >%TEMP%\Temporary.txt 

2) Iterate aufgeführten Verzeichnisse und tun, was Sie mit jedem von ihnen benötigen:

for /f %%g in (%TEMP%\Temporary.txt) do if exist %%g\test.txt rd /s /q %%g 
0

Vielleicht Du überstehst das ein bisschen. Wenn Sie von einer Datei lesen, ist es sehr einfach, einfach rmdir zu tun, was automatisch die Dateien und Unterordner im Verzeichnis löscht. Ihre del *.* hat keinen Pfad festgelegt und wird aus dem Arbeitsverzeichnis gelöscht.

Denken Sie daran, dass Ihr Testordner keine Anführungszeichen enthalten darf, wenn Sie Anführungszeichen im Skript verwenden. so sollte sein:

c: \ Was auch immer der Ordner \ Ordner

c: \ Was auch immer der Ordner \ Ordner 2

Dies sollte gut funktionieren.

for /F "eol=; tokens=*" %%p in (test.txt) do @if exist %%p (echo rd /S "%%p") 

die echo entfernen, sobald Sie zufrieden sind, dass es nur löschen, was Sie wollen. Mit der Option/Q können Sie auch löschen, ohne jedes Mal zu bestätigen.

for /F "eol=; tokens=*" %%p in (test.txt) do @if exist %%p (rd /S /Q "%%p") 
Verwandte Themen