Isso funciona para mim, se você colocar o seguinte em um arquivo CMD:
@echo off
SETLOCAL EnableDelayedExpansion
for /f "usebackq delims=" %%A in ('cmd /c dir /s /b') DO (
set NAME=%%A
set SHORT=!NAME:%cd%\=!
echo.!SHORT!
)
Ele pega a saída do seu comando original dir
e usa a substituição de string para remover o diretório atual. Veja set /?
para mais informações sobre isso. Se você preferir passar o diretório como um argumento em vez de usar o diretório atual, tente esta modificação das variáveis:
@echo off
SETLOCAL EnableDelayedExpansion
for /f "usebackq delims=" %%A in ('cmd /c dir /s /b %1') DO (
set NAME=%%A
set SHORT=!NAME:%~1\=!
echo.!SHORT!
)
Cuidado com os nomes de arquivos e diretórios que possuem um ponto de exclamação no nome do arquivo, pois eles tendem a ficar sem esse método. Se você precisar de algo mais robusto que possa lidar com isso, procure instalar o GNU sed ou grep . Você também pode investigar usando o comando find do GNU se você não se importar com os nomes de arquivos que retornam ao estilo UNIX com barras ao invés de barras invertidas e um ./
à frente de cada entrada.
Há também outra resposta que pode fornecer ideias sobre o tratamento de pontos de exclamação no processamento do CMD: link