Não há um comando de arquivo em lote único que faça o que você deseja, mas você pode usar um arquivo em lotes para realizar a tarefa e call
do seu próprio. A resposta de Ansgar Wiechers teve a idéia básica correta (vejo que ele corrigiu sua versão depois que eu postei a minha).
De qualquer forma, aqui está uma versão que produzirá uma lista delimitada por ponto-e-vírgula de subpastas de primeiro nível no diretório atual ou uma passada para ele como um argumento. Eu escolhi usar um delimitador ponto-e-vírgula em vez de, digamos, uma vírgula, porque ele nunca poderia ser um nome de arquivo válido (e vírgulas podem ser, embora seja incomum).
Se um dado nome de pasta contiver espaços, ele deve ser citado assim (caso contrário, o caminho do diretório da pasta é opcional):
subdirs "C:\Documents and Settings"
Observe que ele só imprime a lista no console (stdout), portanto, se você quiser salvá-la em um arquivo, precisará acrescentar um > filename.ext
após o nome do arquivo de script (e qualquer nome de pasta) para redirecionar o arquivo. saída em arquivo de sua escolha:
subdirs C:\Windows > dirlist.txt
== subdirs.bat ==
@echo off
setlocal EnableDelayedExpansion
pushd %1
for /D %%d in (*.*) do set n=!n!;%%d
if defined n echo %n:~1%
popd
endlocal
Se você quiser produzir o caminho completo para cada nome de pasta, poderá alterar a set n=!n!;%%d
para set n=!n!;%%~fd
na linha de loop for
.