Вопрос: Как печатать файлы с именем текущего каталога вместо полного пути


dir /b /s

Это печатает:
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

Мне нужно напечатать:
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

Как я могу это сделать?


2
2017-11-20 16:12


Источник


Какую проблему ты пытаешься решить? - dsolimano
Я нашел это: Команда TechNet DIR, У меня нет времени пересмотреть это, но он должен сказать, можете ли вы это сделать или нет. - Dooley_labs


Ответы:


Это работает для меня, если вы поместите следующее в 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!
) 

Он принимает результат вашего оригинала dir и использует подстановку строк для удаления текущего каталога. Видеть set /? для получения дополнительной информации об этом. Если вы предпочитаете передавать каталог в качестве аргумента вместо использования текущего каталога, попробуйте эту модификацию переменных:

@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!
) 

Остерегайтесь имен файлов и каталогов, у которых есть восклицательный знак в имени файла, поскольку они, как правило, лишаются этого метода. Если вам нужно что-то более надежное, которое может справиться с этим, посмотрите на установку GNU СЕПГ или Grep, Вы также можете исследовать с помощью GNU найти если вы не возражаете, чтобы имена файлов возвращались в стиле UNIX со слэшами вместо обратных косых черт, а ведущий ./ перед каждой записью.

Существует еще один ответ, который может дать вам идеи по обработке восклицательных знаков при обработке CMD: https://stackoverflow.com/questions/32873578/how-to-read-a-string-with-from-a-file-in-windows-batch-script/32874195#32874195


0
2017-11-20 20:25