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.
windows
batch-file
wildcards
Andrew Lay
źródło
źródło
del a.a b.b
Odpowiedzi:
PLIK SERII DO USUNIĘCIA Z SUBFOLDERÓW O RÓŻNYCH NAZWACH DYNAMICZNIE ZA POMOCĄ WILDCARD DLA NAZW SUBFOLDERÓW
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
iFOR
iterują odpowiednio, aby wykonać resztę magii przechodząc przez katalog, gdy logika określa i wykonujeDEL /Q /F
polecenie dla*.txt
plików)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.DALSZE SZCZEGÓŁY I ZASIĘG
(Wpisz w
FOR /?
wierszu polecenia systemu Windows, aby zobaczyć ten szczegół)FOR (bez przełącznika)
FOR / D
źródło
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
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”.
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
Uruchom polecenie cleantree powinno wyglądać tak
źródło
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 kataloguUsuń 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:
źródło