Batchdatei zum Löschen von Dateien aus dem Platzhalterordner

Batchdatei zum Löschen von Dateien aus dem Platzhalterordner

Wie erstelle ich eine Batchdatei, die Dateien aus mehreren Verzeichnissen löscht?

D:\L1\asdasda\L3\*.txt
D:\L1\dfghfghfh\L3\*.txt
D:\L1\tyutyugj\L3\*.txt
D:\L1\ytrtyrty\L3\*.txt

Wie:

D:
del "d:\L1\*\L3\*.txt"

Anmerkung von Barlop – Fragesteller fügt hinzu –

Ich habe ungefähr hundert dieser Verzeichnisse. Ich möchte nicht die Ordner löschen, sondern nur die Dateien. Alle haben einen L3-Ordner und alle enthalten einige Dateien mit derselben Erweiterung. Das sind nur temporäre Dateien, aber sie werden nicht automatisch gelöscht.

Antwort1

Batch-Datei zum dynamischen Löschen aus Unterordnern mit unterschiedlichen Namen unter Verwendung von Platzhaltern für Unterordnernamen

Batchdatei zum Löschen von Dateien aus dem Platzhalterordner

Hier ist ein einfaches Beispiel für ein Batch-Skript, das ich ständig verwende, um diese Art von Aufgabe zu erledigen. Ich habe die variablen Ordnerpfade entsprechend Ihren Anforderungen eingefügt, wie Sie es beschreiben:

BEISPIEL FÜR BATCH-SKRIPT

(Legen Sie Ihren variablen Stammordner und Unterordner oben fest, und die FOR /D und FOR-Schleifen iterieren entsprechend, um den Rest der Magie zu erledigen, indem sie das Verzeichnis durchlaufen, wie es die Logik vorgibt, und den DEL /Q /FBefehl für die *.txtDateien abschließen.)

@ECHO ON

SET SourceDir=D:\L1
SET SourceSubDir=L3

:: --// note the asterisk wildcard after SourceDir in the first FOR /D loop using X as the variable
:: --// note the X variable appended to the beginning of the second FOR (no /D switch here) loop in the SET part using Y as the variable
FOR /D %%X IN ("%SourceDir%\*") DO FOR %%Y IN ("%%~X\%SourceSubDir%\*.txt") DO DEL /Q /F "%%~Y"
GOTO EOF

NOTIZ: Wenn Sie dies mit einem Kopieren und Einfügen manuell in der Eingabeaufforderung ausführen möchten, dann die Variablen in der FOR Bei Schleifen muss in allen Teilen eines der Prozentzeichen entfernt werden. Verwenden Sie daher für diesen Teil das Folgende, wenn Sie dies manuell per Kopieren und Einfügen ausführen und nicht in einem Batch-Skript, und führen Sie dieses aus. So funktioniert das obige Beispiel.

FOR /D %X IN ("%SourceDir%\*") DO FOR %Y IN ("%~X\%SourceSubDir%\*.txt") DO DEL /Q /F "%~Y"

WEITERE DETAILS UND FORSCHUNGEN

(Eintippen FOR /? in der Windows-Eingabeaufforderung, um dieses Detail anzuzeigen)

FÜR (ohne Schalter)

Runs a specified command for each file in a set of files.

FOR %variable IN (set) DO command [command-parameters]

  %variable  Specifies a single letter replaceable parameter.
  (set)      Specifies a set of one or more files.  Wildcards may be used.
  command    Specifies the command to carry out for each file.
  command-parameters
             Specifies parameters or switches for the specified command.

To use the FOR command in a batch program, specify %%variable instead
of %variable.  Variable names are case sensitive, so %i is different
from %I.

If Command Extensions are enabled, the following additional
forms of the FOR command are supported:

FÜR /D

FOR /D %variable IN (set) DO command [command-parameters]

    If set contains wildcards, then specifies to match against directory
    names instead of file names.

Antwort2

Interpretieren Sie Ihre Zeile \L1\*\L3\* wie folgt: Suchen Sie für ein gegebenes Verzeichnis L1 alle Unterverzeichnisse, die ein Unterverzeichnis L3 haben, und löschen Sie alle darin enthaltenen Dateien.

Es muss ein Skript geschrieben werden, um die Verzeichnisstruktur zu durchlaufen. Dies ist nicht so einfach als Batchdatei möglich. Möglicherweise müssen Sie Perl oder Powershell verwenden, die Möglichkeiten bieten, eine Liste von Verzeichnissen oder Dateien abzurufen und dann wiederholte Aktionen darauf auszuführen.

Im Pseudocode

Get list directories
For each dir 
  Cd into it
  Check if The dir L3 exists
  If it does then del .\L3\*.* 
  Go back up a level
Next dir

Ich werde darüber nachdenken und habe dies im Batchdateicode getan, obwohl ich überlege, es in Powershell noch einmal zu machen, nur um den Unterschied zu sehen.

Ok, ich habe darüber nachgedacht

Diese Batchdatei durchsucht die Verzeichnisstruktur, von der aus sie ausgeführt wird, und löscht den Inhalt aller Verzeichnisse mit dem Namen „L3“.

@echo off
for /r %%d in (*) do call :process "%%d"
goto :eof

:process
pushd "%~dp1"
for /f "delims=" %%A in ('cd') do (
     set foldername=%%~nxA
    )
if "%foldername%"=="L3" del/q *.*
popd
goto :eof

Es ist vielleicht möglich, es einfacher zu machen, aber das Abrufen des aktuellen Verzeichnisnamens ist chaotisch (die For-Schleife im Prozessabschnitt).

Wenn ein Verzeichnis so beginnt

└───L1
    │   1.dat
    ├───Alice
    │   │   9.dat
    │   │
    │   └───L3
    │           c.dat
    │           d.dat
    ├───Bob
    │       6.dat
    ├───Carole
    │   │   2.dat
    │   │
    │   └───L3
    │           a.dat
    │           b.dat
    └───Ted
            6.dat

Wenn Sie cleantree ausführen, sollte es so aussehen

└───L1
    │   1.dat
    ├───Alice
    │   │   9.dat
    │   │
    │   └───L3
    ├───Bob
    │       6.dat
    ├───Carole
    │   │   2.dat
    │   │
    │   └───L3
    └───Ted
            6.dat

Antwort3

for /f %G in ('dir /ad /b D:\L1\') do del D:\L1\%G\L3\*.txt

for /fführt den folgenden do-Befehl für alle Dateien im Set aus

%G in ('dir /ad /b D:\L1\')Variable als Basisformat für jeden Ordner im angegebenen Verzeichnis festlegen

Löschbefehl mit festgelegtem %G-Wert und Platzhalter für das Verzeichnis


Zuerst Testlauf

Führen Sie es mit „Echo“ aus, um die auszuführenden Befehle auf der Konsole auszugeben und den Befehl zu testen, ohne ihn tatsächlich auszuführen:

for /f %G in ('dir /ad /b D:\L1\') do echo del D:\L1\%G\L3\*.txt

verwandte Informationen