Документация, которую вы получаете при вводе help for
, говорит вам, что делать, если у вас есть путь с пробелами.
For file names that contain spaces, you need to quote the filenames with
double quotes. In order to use double quotes in this manner, you also
need to use the usebackq option, otherwise the double quotes will be
interpreted as defining a literal string to parse.
По умолчанию синтаксис FOR /F
следующий.
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
Этот синтаксис показывает, почему ваш type
обходной путь работает. Потому что в одинарных кавычках говорится, что нужно выполнить команду type
и перебрать ее вывод. Когда вы добавляете параметр usebackq
, синтаксис изменится на этот:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]
Теперь вы ставите двойные кавычки в пути к файлам, литеральные строки в одинарных кавычках и ставите обратные кавычки (серьезные акценты) вокруг команд для выполнения.
Итак, вы хотите сделать это:
for /f "usebackq" %%a in ("C:\Program Files\myfolder\myfile.txt") do (
echo %%a
)