Как предложил Mofi, вы можете отключить отложенное расширение и использовать
call set filesList=%%filesList%%"%%~nxB"
Но это не сработает, если в именах файлов есть пробелы.
Проблема в вашем коде в том, что параметры FOR могут быть безопасно расширены только без режима отложенного расширения.
Обычно для этого вы используете технику переключателя, как здесь.
setlocal DisableDelayedExpansion
for /F "delims=" %%B in ('dir %%A^* /a-d /b') do (
set "line=%%B"
setlocal EnableDelayedExpansion
REM *** Process the content of line here
echo !line!
endlocal
)
Но это работает только тогда, когда вам не нужно переносить содержимое line
из (внутренней) области setlocal.
В вашем случае вы пытались добавить содержимое line
в переменную filesList
вне области действия.В этом случае вам нужно передать содержимое line
через конец области с более или менее сложной техникой, например,
Сделать переменную среды живущей ENDLOCAL
Макрос для возвратанесколько переменных через эндокальные барьеры