У меня на жестком диске есть файлы, которые вообще не имеют расширений. Очень сложно найти их вручную, мне очень не нравится тот факт, что мне придется заменить мышь раньше из-за небольшого, но все же очень заметного ущерба, нанесенного оборудованию попытками найти эти файлы путем постоянного нажатия и прокрутки, поскольку их несколько сотен из тысяч в одной папке.
Знает ли кто-нибудь 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
Дополнительные ресурсы
решение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 на самом деле. Я предпочитаю сокращение. Его сложнее читать новичку, но он более выразителен и лаконичен