«Проблема» - это то, к чему относится содержимое заменяемого параметра for
:
- В простой команде
for
заменяемый параметр относится к файлу / папке.
- В
for /f
заменяемый параметр относится к текстовой строке.
И вы во втором случае. Ваш for /f
обрабатывает текстовые строки. Поскольку вы используете dir /b
, вы получаете только имя и расширение файлов, без указания пути, который указывается только при использовании /s
.
Поскольку заменяемый параметр for
содержит только строку (имя файла, но только строку), любая операция, пытающаяся получить диск или путь (%~dpa
), отсутствующий в строке, будет использовать текущий каталог как источник информации.
Вы можете попробовать с
for %%a in ("..\*.csv") do (echo "%~fa")