Этот пакетный скрипт сделает это.
@echo off
set target=%~1
if "%target%"=="" set target=%cd%
setlocal EnableDelayedExpansion
set LF=^
rem Previous two lines deliberately left blank for LF to work.
for /f "tokens=*" %%i in ('dir /b /s /a:-d "%target%"') do (
set ext=%%~xi
if "!ext!"=="" set ext=FileWithNoExtension
echo !extlist! | find "!ext!:" > nul
if not !ERRORLEVEL! == 0 set extlist=!extlist!!ext!:
)
echo %extlist::=!LF!%
endlocal
Сохраните его как любой .bat
файл и запустите его с помощью команды batchfile
(замените то, что вы назвали), чтобы отобразить текущий каталог, или укажите путь с помощью batchfile "path"
. Будет искать все подкаталоги.
Если вы хотите экспортировать в файл, используйте batchfile >filename.txt
(или batchfile "path" >filename.txt
).
объяснение
Все, что находится перед for /f...
строкой, просто настраивает: он ищет целевой каталог для поиска, включает отложенное расширение, что позволяет мне обновлять переменные в цикле и определяет newline ( LF
), который я могу использовать для более точного вывода. Да, и %~1
означает «получить первый аргумент, удаляя кавычки», который предотвращает двойные кавычки - см for /?
.
Цикл использует это dir /b /s /a:-d "%target%"
команду, собирая список всех файлов во всех подкаталогах под целью.
%%~xi
извлекает расширение из полных путей, которые dir
возвращает команда.
Пустое расширение заменяется на «FileWithNoExtension», так что вы знаете, что такой файл существует - если я добавил пустую строку вместо этого, это не так очевидно.
Весь текущий список при отправке через find
команду, чтобы обеспечить уникальность. Текстовый вывод команды find отправляется nul
, по сути, в черную дыру - нам это не нужно. Поскольку мы всегда добавляем a :
в конец списка, мы также должны убедиться, что поисковый запрос заканчивается на, :
чтобы он не совпадал с частичными результатами - см. Комментарии.
% ERRORLEVEL% устанавливается find
командой, значение 0 указывает на совпадение. Так что, если это не 0, текущее расширение пока отсутствует в списке и должно быть добавлено.
Линия эха в основном выводит, и я также заменяю свои заполнители ( :
) на новые строки, чтобы они выглядели хорошо.
batchfile "path" >filename.txt
aaa.css
иzzz.cs
, расширение.cs
не сообщит сценарий.:
чтобы заставить его соответствовать границам.Несмотря на то, что он не соответствует требованиям для пакетного сценария, я использовал однострочный сценарий powershell:
Вы можете запустить его из командной строки / командного файла:
Я не претендую на кредит, и, конечно, вам понадобится установленный Powershell. Для более новых версий Windows это не обходится.
Если вы удалите
C:\MyDirectory
его, он будет выполняться в текущем каталоге.В конце он создаст FileExtensions.txt, содержащий что-то вроде следующего:
В зависимости от структуры вашей папки вы можете иногда получать сообщения об ошибках, уведомляющие вас о длинном пути.
Любые подкаталоги там также не будут анализироваться, но результаты для всего остального будут отображаться.
источник
Вот подробный ответ с помощью PowerShell (в Windows XP вам придется установить PowerShell):
Эй, автор сценариев! Как я могу использовать Windows PowerShell для выбора уникальных расширений файлов, используемых в коллекции файлов?
источник
Чтобы получить список всех уникальных расширений из cmd по пути, который вы используете:
источник
Я нашел полезным изменить
в
и изменить
в
Сгенерированный файл содержит (без перевода строки, но не имеет значения) .bat.pdf.skp.ai.png.jpg.tif.pcp.txt.lst.ttf.dfont.psd.indd.docx.PDF.JPG.gif.jpeg .dwg.exr.FileWithNoExtension.vrlmap.sat.bak.ctb
который я тогда смог использовать для своего проекта.
источник