Plik wsadowy do usunięcia plików z folderu wieloznacznego

1

Jak utworzyć plik wsadowy, który usuwa pliki z wielu katalogów?

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

Lubić:

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

Uwaga Barlop - dodaje pytający -

Mam około stu takich katalogów. Nie chcę usuwać folderów, tylko pliki. Wszystkie mają folder L3 i wszystkie zawierają niektóre pliki z tym samym rozszerzeniem. Są to tylko pliki tymczasowe, ale nie są usuwane automatycznie.

Andrew Lay
źródło
nie podałeś błędu, który otrzymujesz
barlop
można powiedziećdel a.a b.b
Barlop,
Czy „& # 42;” naprawdę nazwa pliku (usuwanie, które działa tutaj) czy to tylko niektóre niepotrzebne znaczniki HTML (to proszę wpisać tylko prawdziwą nazwę pliku)?
Werner Henze,
Niestety, poprzednio nie mógł poprawnie wyświetlić *, dlatego użyłem kodu HTML do wyświetlenia (*). Ale nie jestem pewien, dlaczego teraz działa.
Andrew Lay
och, chcesz jak rmdir z symbolem wieloznacznym. Wydaje mi się, że to, co zrobiłbym, to nie to, że… dostałbym listę plików, które chcesz usunąć, do pliku. Potem dostanę przed nimi słowo „del”, a ten plik zrobię z pliku wsadowego i uruchomię. To też jest całkiem bezpieczne, ponieważ wtedy dokładnie widzisz, co zostanie usunięte. Możesz otworzyć listę plików w notatniku ++ i znaleźć początek każdego wiersza za pomocą ^ i zastąpić go „del”
barlop

Odpowiedzi:

0

PLIK SERII DO USUNIĘCIA Z SUBFOLDERÓW O RÓŻNYCH NAZWACH DYNAMICZNIE ZA POMOCĄ WILDCARD DLA NAZW SUBFOLDERÓW

Plik wsadowy do usunięcia plików z folderu wieloznacznego

Oto prosty i prosty przykład skryptu wsadowego, którego używam do wykonywania tego typu zadań przez cały czas, podłączyłem ścieżki folderów zmiennych, aby dopasować je do twoich potrzeb, jak opisano:

PRZYKŁADOWY ZESPÓŁ SERII

(Ustaw swój zmienny folder główny i podfolder na górze, a pętle FOR /D i FORiterują odpowiednio, aby wykonać resztę magii przechodząc przez katalog, gdy logika określa i wykonuje DEL /Q /Fpolecenie dla *.txtplików)

@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

UWAGA: Jeśli planujesz uruchomić to z kopią i wkleić ręcznie w wierszu polecenia, to zmienne w FOR pętlach muszą mieć jeden ze znaków procentu usunięty we wszystkich częściach, więc użyj tej części poniżej, jeśli korzystasz z tej części ręcznie za pomocą funkcji kopiuj i wklej zamiast skryptu wsadowego i wykonując to, jak działa powyższy przykład.

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

DALSZE SZCZEGÓŁY I ZASIĘG

(Wpisz w FOR /? wierszu polecenia systemu Windows, aby zobaczyć ten szczegół)

FOR (bez przełącznika)

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:

FOR / 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.
Pimp Juice IT
źródło
0

Interpretowanie linii \ L1 \ * \ L3 \ *. Jak: Dla danego katalogu L1 znajdź wszystkie podkatalogi, które mają podkatalog L3 i usuń wszystkie pliki w nim zawarte.

Aby przejść przez strukturę katalogów, należy napisać skrypt. Nie jest to łatwe do wykonania jako plik wsadowy. Może być konieczne użycie Perla lub programu PowerShell, które mają sposoby na uzyskanie listy katalogów lub plików, a następnie wykonanie na nich powtarzanej akcji.

Pseudo kodem

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

Zastanowię się nad tym i zrobiłem to w kodzie pliku wsadowego, chociaż myślę o przerobieniu go w programie PowerShell, aby zobaczyć różnicę.

Ok, myślałem o tym

Ten plik wsadowy przejdzie do struktury katalogu, z którego jest uruchamiany, i usunie zawartość dowolnego katalogu o nazwie „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

Możliwe, że jest to prostsze, ale operacja uzyskiwania tylko bieżącej nazwy katalogu jest nieprzyjemna (sekcja pętli for w procesie)

Jeśli katalog zaczyna się w ten sposób

└───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

Uruchom polecenie cleantree powinno wyglądać tak

└───L1
    │   1.dat
    │
    ├───Alice
    │   │   9.dat
    │   │
    │   └───L3
    ├───Bob
    │       6.dat
    │
    ├───Carole
    │   │   2.dat
    │   │
    │   └───L3
    └───Ted
            6.dat
Prozaiczny haker
źródło
0
for /f %G in ('dir /ad /b D:\L1\') do del D:\L1\%G\L3\*.txt

for /f uruchamia następujące polecenie do dla wszystkich plików w zestawie

%G in ('dir /ad /b D:\L1\') zmienna ustawiona jako czysty format dla każdego folderu w danym katalogu

Usuń polecenie, używając zestawu% G wartość i symbol wieloznaczny dla katalogu


Uruchom najpierw test

uruchom z echem, aby wydrukować na konsoli polecenia, które zostaną uruchomione, aby przetestować polecenie bez jego uruchamiania:

for /f %G in ('dir /ad /b D:\L1\') do echo del D:\L1\%G\L3\*.txt
timtom
źródło