Como imprimir arquivos com o nome do diretório atual em vez do caminho completo

2

dir /b /s

Isto imprime:
D:\stuff\tmp>dir /b /s D:\stuff\tmp\A.java D:\stuff\tmp\AAA D:\stuff\tmp\B.java D:\stuff\tmp\C.java D:\stuff\tmp\Why.class D:\stuff\tmp\Why.java D:\stuff\tmp\XX.class D:\stuff\tmp\XX.java D:\stuff\tmp\XX.txt D:\stuff\tmp\AAA\aaa.kkk

Eu preciso imprimir: D:\stuff\tmp>???? tmp\A.java tmp\AAA tmp\B.java tmp\C.java tmp\Why.class tmp\Why.java tmp\XX.class tmp\XX.java tmp\XX.txt tmp\AAA\aaa.kkk

Como posso fazer isso?

    
por as jak 20.11.2015 / 17:12

1 resposta

0

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

    
por 20.11.2015 / 21:25