Я не уверен, чего вы хотите достичь, но по крайней мере это даст вам хорошую отправную точку:
@echo off & setlocal enabledelayedexpansion
set rootdir=D:\download
for /R %rootdir% %%F in (*) do (
set B=%%~pF
::take substring of the path
set B=!B:~0,-6!
echo Full : %%F
echo Partial: !B!
echo.
)
Поскольку вы изменяете переменную в цикле, вам нужно сообщить интерпретатору команд, что вы хотите разрешить переменные «расширяться с задержкой». Для этого setlocal enabledelayedexpansion
. Затем вы можете использовать !
в качестве разделителя переменных вместо %
, и переменные, записанные как таковые, будут расширены во время выполнения. Это необходимо, потому что for
-loop будет вызываться так, как если бы это был 1 однократный вызов (вы можете увидеть это, когда пропустите echo off
)
Редактировать : исправленный пример, который включает автоматическое отключение:
@echo off & setlocal enabledelayedexpansion
set rootdir=%~f1
set foo=%rootdir%
set cut=
:loop
if not "!foo!"=="" (
set /a cut += 1
set foo=!foo:~1!
goto :loop
)
echo Root dir: %rootdir%
echo strlen : %cut%
:: also remove leading /
set /a cut += 1
for /R %rootdir% %%F in (*) do (
set B=%%~fF
::take substring of the path
set B=!B:~%cut%!
echo Full : %%F
echo Partial : !B!
echo""
)