Это работает для меня, если вы поместите следующее в файл 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 sed или grep. Вы также можете исследовать с помощью команды GNU find, если вы не возражаете против имен файлов, возвращающихся в стиле UNIX с косой чертой вместо обратной косой черты и с начальным ./
перед каждой записью.
Есть также другой ответ, который может дать вам идеи по обработке восклицательных знаков при обработке CMD: https://stackoverflow.com/questions/32873578/how-to-read-a-string-with-from-a-file-in- окна-пакетный сценарий /32874195 # 32874195