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

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

4 ответа4

5

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

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

В соответствии с PetSerAl, вот некоторые из методов синтаксиса расширенного запроса File Explorer, с которых нужно начинать, но подробнее читайте ниже об эквивалентных методах командной строки и пакетного сценария для этой задачи.

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

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

Нерекурсивна

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

или же

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

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

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

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

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

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

  • Для /F
  • FOR /?

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

    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    
  • Dir

  • Если
1

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

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

Или же:

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

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

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

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

0

В командной строке просто используйте *.:

C:\directory\name> dir

08/24/2018  03:33 AM              .
08/24/2018  03:33 AM              ..
08/24/2018  03:33 AM                16 a
08/24/2018  03:33 AM                18 b.c
08/24/2018  03:33 AM                20 d.e.f
               3 File(s)             54 bytes

C:\directory\name> dir *.

08/24/2018  03:33 AM              .
08/24/2018  03:33 AM              ..
08/24/2018  03:33 AM                16 a
               1 File(s)             16 bytes

C:\directory\name>

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

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

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