Этот ответ не будет корректно работать с корневыми путями, содержащими знаки равенства (=
).(Спасибо @dbenham за указание на это.)
РЕДАКТИРОВАНИЕ: Исправлена проблема с путями, содержащими !
, снова замеченными @dbenham (спасибо!).
В качестве альтернативы вычислению длины и извлечению подстрок вы можете использовать другой подход:
Вот моя попытка (которая сработала для меня):
@ECHO OFF
SETLOCAL DisableDelayedExpansion
SET "r=%__CD__%"
FOR /R . %%F IN (*) DO (
SET "p=%%F"
SETLOCAL EnableDelayedExpansion
ECHO(!p:%r%=!
ENDLOCAL
)
The r
Переменная присваивается текущему каталогу. Если текущий каталог не является корневым каталогом диска, он не будет заканчиваться на \
, который мы изменяем, добавляя символ. (Больше не так, поскольку скрипт теперь читаетпеременная __CD__
, значение которой всегда заканчивается на \
(спасибо @jeb!) вместо CD
.)
В цикле мы сохраняем текущий путь к файлу в переменной,Затем мы выводим переменную, удаляя корневой путь по пути.