@echo off
setlocal enabledelayedexpansion
set num=0
FOR %%F IN (*) DO (
set /a num += 1
echo !num! %%~fF
)
echo %num% files
endlocal
"%% ~ fF" imprime o caminho completo. Para imprimir o nome curto do arquivo, use "%% F". Veja for /?
perto do final para todas as expansões possíveis.
Editar : para passar um diretório, mude para
FOR %%F IN (%**) DO (
E chame-o com um nome de diretório com a seguinte barra ("C: \ Windows \", não "C: \ Windows") ou sem nome de diretório.
Você também pode alterar para o diretório com pushd %*
antes do loop for e, em seguida, popd
a qualquer momento após o loop for. Isso seria útil se você precisasse fazer mais do que enumerar os arquivos, mas deseja retornar ao diretório de trabalho original.
Editar : aqui está uma versão anotada mais completa. Ele também lista diretórios - eu perdi que for
não faz isso por padrão:
@echo off
setlocal enabledelayedexpansion
:: change to a dir
pushd %*
:: file counter
set num=0
:: dirs only
FOR /D %%D IN (*) DO (
set /a num += 1
echo !num! %%D
)
:: files only
FOR %%F IN (*) DO (
set /a num += 1
echo !num! %%F
)
:: final tally
echo.
echo %num% files
:: return to original directory
popd
endlocal
Basta salvar em um arquivo com a extensão .cmd
e colocá-lo em algum lugar do caminho (por exemplo, C: \ Windows), e isso deve funcionar em qualquer sistema operacional Windows recente (testado no XP).