Este script em lote fará isso.
@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
Salve-o como qualquer .bat
arquivo e execute-o com o comando batchfile
(substitua o nome que desejar) para listar o diretório atual ou especifique um caminho com batchfile "path"
. Ele pesquisará todos os subdiretórios.
Se você deseja exportar para um arquivo, use batchfile >filename.txt
(ou batchfile "path" >filename.txt
).
Explicação
Tudo antes da for /f...
linha apenas configura as coisas: faz com que o diretório de destino pesquise, permite expansão atrasada, o que me permite atualizar variáveis no loop e define uma nova linha ( LF
) que eu posso usar para uma saída mais limpa. Ah, e os %~1
meios "obtêm o primeiro argumento, removendo aspas", o que impede citações dobradas - veja for /?
.
O loop usa esse dir /b /s /a:-d "%target%"
comando, pegando uma lista de todos os arquivos em todos os subdiretórios sob o destino.
%%~xi
extrai a extensão dos caminhos completos que o dir
comando retorna.
Uma extensão vazia é substituída por "FileWithNoExtension", para que você saiba que existe esse arquivo - se eu adicionei uma linha vazia, não é tão óbvio.
A lista atual inteira, se enviada por meio de um find
comando, para garantir exclusividade. A saída de texto do comando find é enviada para nul
, essencialmente, um buraco negro - não queremos isso. Como sempre anexamos a :
no final da lista, também devemos garantir que a consulta de pesquisa termine com um :
para que não corresponda a resultados parciais - consulte os comentários.
% ERRORLEVEL% é definido pelo find
comando, um valor 0 indica que houve uma correspondência. Portanto, se não for 0, a extensão atual não está na lista até agora e deve ser adicionada.
A linha de eco basicamente gera e também substituo meus espaços reservados ( :
) por novas linhas para torná-la agradável.
batchfile "path" >filename.txt
aaa.css
ezzz.cs
, a extensão.cs
não será relatada pelo script.:
para forçá-la a corresponder aos limites.Embora não cumpra estritamente o requisito para um script em lote, usei um script de PowerShell de linha única:
Você pode executá-lo a partir da linha de comando / arquivo em lote:
Não reivindico crédito por isso e, é claro, você precisará do Powershell instalado. Para versões mais recentes do Windows, não há como contornar isso.
Se você removê-
C:\MyDirectory
lo, ele será executado no diretório atual.No final, ele produzirá um FileExtensions.txt contendo algo como o seguinte:
Dependendo da estrutura da pasta, você pode ocasionalmente receber erros notificando que você possui um caminho longo.
Todos os subdiretórios lá também não serão analisados, mas os resultados para todo o resto ainda serão exibidos.
fonte
Aqui está uma resposta detalhada usando o PowerShell (no Windows XP, você precisará instalar o PowerShell):
Ei, Equipe de Scripts! Como posso usar o Windows PowerShell para escolher as extensões de arquivo exclusivas usadas em uma coleção de arquivos?
fonte
Para listar todas as extensões exclusivas do cmd no caminho em uso:
fonte
Achei útil mudar
para
e mudar
para
O arquivo gerado continha (sem feeds de linha, mas não importa) .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
que eu pude usar no meu projeto.
fonte