Jak wykonać „nie równe” wyszukiwanie za pomocą Eksploratora Windows (lub innej aplikacji), a następnie usunąć znalezione pliki?

0

w systemie Linux / BSD mogę uruchomić

find my-path-here -not -iname "* txt" -type -f -delete

spowoduje to usunięcie wszystkich plików, które nie są plikami .txt w określonym folderze.

Chcę zrobić coś podobnego w oknach. Najlepiej nie używać PowerShell. :)

Dzięki

mrjayviper
źródło
Jaki jest powód, aby nie używać PowerShell, ponieważ jest to prawdopodobnie najłatwiejsza dostępna opcja, która nie wymaga dodatkowego oprogramowania?
Seth
@seth dzięki za pytanie. Uważam, że Power Shell jest zbyt skomplikowany w porównaniu do powłoki Linuksa (zwykle bash).
mrjayviper
2
Naprawdę myślę, że to dlatego, że po prostu tego nie zbadałeś / nie dowiedziałeś się o tym. Zgadzam się, że może to być skomplikowane dla pewnych rzeczy, ale szukanie plików jest raczej łatwe. Wysłałem przykład jako odpowiedź, aby pokazać, jak to zrobić w tym przypadku. Jeśli korzystasz już z alternatywy eksploratora, takiej jak TotalCommander lub podobnej, może to również dać ci kilka opcji GUI.
Seth
1
@seth masz rację. Bardziej komfortowo piszę skrypty Bourne / bash w porównaniu do skryptów Windows.
mrjayviper
1
Zainstaluj cygwin, pochodzi z bash. Więc nie musisz myśleć o nauce. GNUWin32 jest również opcją.
harper

Odpowiedzi:

2

Agent Ransack / FileLocator Lite jest do tego idealny

FileLocator Lite to rebranding Agent Ransack dla firm   środowiska. Ma dokładnie taką samą funkcjonalność, ale z   inna nazwa i logo

Jest bezpłatny do użytku osobistego.

Zestaw File name: do NOT: *.txt

Możesz opcjonalnie wyszukać Containing text:

Zestaw Look in: na twoją ścieżkę

Kliknij Start

Następnie możesz wybrać elementy z wyników w zwykły sposób (kliknij, Przesunięcie + kliknij, Ctrl + kliknij itd.) i usuń.

enter image description here

Możesz także skonfigurować go, aby reagował F3 i Ctrl + fa zastąpić Wyszukiwanie Eksploratora Windows:

Tools -> Shell Integration -> Replace default Explorer Search
Shevek
źródło
4

Jeśli szukasz sposobu na zrobienie tego z wiersza poleceń, polecenie for może być pomocne:

for /f "tokens=*" %a in ('dir /b /o') do @if not "%~xa" == ".txt" (@echo del: "%a") else (@echo keep: "%a")

Przykład:

example for the above code

parallyze
źródło
3

PowerShell daje Ci korzyść z wbudowania (w nowoczesnych wersjach Windows) i nie wymaga dodatkowego narzędzia. Jeśli nie używasz wykluczenia do wyszukiwania, normalne wyszukiwanie Eksploratora Windows może być również wystarczające. Obsługuje pewien modyfikator, aby zawęzić wyszukiwanie.

Get-ChildItem -File -Recurse | Where Name -notlike "*.txt" | Remove-Item

Możesz również użyć podsystemu Windows dla systemu Linux (WSL), aby nam przekazać to samo polecenie, chociaż okaże się, że ma on inne problemy i może nie działać dokładnie tak samo. Poza tym byłoby to przesadą dla tak prostej rzeczy.

Seth
źródło
W twojej odpowiedzi, gdzie mam podać ścieżkę? A może muszę znaleźć się w folderze, w którym przeprowadzam wyszukiwanie? Wielkie dzięki
mrjayviper
1
Możesz go użyć w dowolny sposób. Powyższy przykład zakłada, że ​​jesteś już na ścieżce. W przeciwnym razie użyj Get-ChildItem -Path "C:\Temp" -Recurse -File. Możesz nawet pominąć -Path ale jeśli go użyjesz, będzie to bardziej wyraziste (tylko osobista opinia).
Seth