на Linux/BSD я могу запустить

найти my-path-here -not -iname "* txt" -type -f -delete

и это удалит все файлы, которые не являются .txt файлами в указанной папке.

Я хочу сделать что-то похожее на Windows. Желательно не использовать powershell. :)

Спасибо

3 ответа3

4

Если вы ищете способ сделать это из командной строки, может быть полезна команда for:

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

Пример:

пример для приведенного выше кода

3

PowerShell дает вам преимущество встроенности (в современных версиях Windows) и не требует дополнительного инструмента. Если вы не используете исключение для поиска, то обычного поиска Windows Explorer также может быть достаточно. Он поддерживает некоторые модификаторы, чтобы сузить ваш поиск.

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

Вы также можете использовать Windows Subsystem for Linux (WSL), чтобы фактически использовать ту же команду, хотя вы обнаружите, что она имеет некоторые другие проблемы и может не работать точно так же. Кроме того, это было бы излишним за такую простую вещь.

2

Агент Ransack / FileLocator Lite идеально подходит для этого

FileLocator Lite - это ребрендинг Agent Ransack для корпоративных сред. Он имеет точно такую же функциональность, но с другим названием и логотипом.

Это бесплатно для личного использования.

Установите File name: NOT: *.txt

При желании вы можете найти Containing text:

Установите Look in: на ваш путь

Нажмите Start

Затем вы можете выбрать элементы из результатов обычным способом (щелчок, Shift+ щелчок, Ctrl+ щелчок и т.д.) И удалить.

Вы также можете настроить его так, чтобы он реагировал на F3 и Ctrl+f, чтобы заменить Windows Explorer Search:

Tools -> Shell Integration -> Replace default Explorer Search

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .