Как легко найти файлы без расширения с помощью Windows

Как легко найти файлы без расширения с помощью Windows

У меня на жестком диске есть файлы, которые вообще не имеют расширений. Очень сложно найти их вручную, мне очень не нравится тот факт, что мне придется заменить мышь раньше из-за небольшого, но все же очень заметного ущерба, нанесенного оборудованию попытками найти эти файлы путем постоянного нажатия и прокрутки, поскольку их несколько сотен из тысяч в одной папке.

Знает ли кто-нибудь cmdкоманду PowerShellили какой-либо расширенный синтаксис поискового запроса в Проводнике Windows, который поможет упростить эту задачу?

решение1

Поиск файлов без расширений в Windows

Проводник Windows — расширенный синтаксис запроса

СогласноPetSerAlвот некоторые изРасширенный синтаксис запроса File Explorerметод, с которого стоит начать, но читайте далее об эквивалентеКомандная строкаиПакетный скриптметоды для этой задачи.

Рекурсивный поиск

kind:= -folder type:= -[] extension:= []

Нерекурсивный

Просто выберите "Текущая папка"опция через графический интерфейс"Поиск" вкладка

введите описание изображения здесь

или

kind:= -folder type:= -[] extension:= [] folder:"C:\folder\path"

Вы можете использоватьдля /фцикл итерации выходных данныхрежкоманду с параметрами /Bи /A-D, а затем использовать некоторые условные операторыеслилогика для вывода только файлов без каких-либо расширений с использованием подстановок для итерируемых файлов в указанном каталоге.

Командная строка

Примечание: Предполагается, что каталог, в котором вы находитесь в командной строке, — это каталог, в котором вам нужно выполнить поиск для отображения файлов без расширений.

FOR /F "TOKENS=*" %A IN ('dir /B * /A-D') DO IF /I [%~nxA]==[%~nA] ECHO %~A

Пакетный скрипт

Примечание: Это пакетный скрипт, в котором вы задаете SET Src=значение каталога, в котором необходимо выполнить поиск для отображения файлов без расширений.

@ECHO ON
SET Src=C:\folder\path
FOR /F "TOKENS=*" %%A IN ('DIR /B "%Src%\*" /A-D') DO IF /I [%%~nxA]==[%%~nA] ECHO %%~A
PAUSE
EXIT

Дополнительные ресурсы

  • Для /Ф
  • FOR /?

    Кроме того, была улучшена подстановка ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:

    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    
  • Режиссёр

  • Если

решение2

Для решения PowerShell:

Get-ChildItem -Path $Path -Recurse -File -Filter '*.'

Или:

Get-ChildItem -Path $Path -Recurse -File | Where-Object Extension -eq ''

Обратите внимание, что для этого -Fileпараметра требуется PowerShell v3+.

решение3

В командной строке просто введите *.:

С:\каталог\имя> реж.

24.08.2018 03:33 AM .
24.08.2018 03:33 AM ..
24.08.2018 03:33 16 утра
24.08.2018 03:33 18 до н.э.
08/24/2018 03:33 AM 20 деф
               3 Файл(ы) 54 байта

С:\каталог\имя> дир *.

24.08.2018 03:33 AM .
24.08.2018 03:33 AM ..
24.08.2018 03:33 16 утра
               1 Файл(ы) 16 байт

С:\каталог\имя>

Помните, командная строка Windows — это не Unix. В именах файлов Unix точка (.) — это просто обычный символ (за исключением того, что имена файлов, начинающиеся с точки, скрыты). В Unix *e*означает все имена файлов, содержащие e, и *.*означает все имена файлов, которые(явно)содержат..

Правила для командной строки сложнее.  *означает все имена файлов (даже с расширением). А *.*также означает все имена файлов (даже не содержащие.). Но *.означает все имена файлов, не имеющие расширения.

решение4

ls | ? {$_.Extension -eq ''}

Здесь используется максимальное сокращение. Но это тот же код, что и у @BaconBits на самом деле. Я предпочитаю сокращение. Его сложнее читать новичку, но он более выразителен и лаконичен

Связанный контент