Пакетное: чтение строк из файла с пробелами в пути
Чтобы прочитать строки из файла, в командном файле вы делаете:
for /f %%a in (myfile.txt) do (
:: do stuff...
)
Теперь предположим, что ваш файл находится в C:\Program Files\myfolder
for /f %%a in ("C:\Program Files\myfolder\myfile.txt") do (
echo %%a
)
Результат:
C:\Program Files\myfolder\myfile.txt
Это, кажется, интерпретирует данный путь как строку, и, таким образом, %%a
это ваш заданный путь.
Ничего об этом в документации, которую я нашел до сих пор. Пожалуйста, кто-нибудь, помогите мне, прежде чем я застрелюсь.
3 ответа
Документация, которую вы получаете при вводе 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
)
Нашел это.
for /f %%a in ('type "C:\Program Files\myfolder\myfile.txt"') do (
echo Deleting: %%a
)
Даже не спрашивайте меня, почему это работает.
Просто поделитесь приведенным ниже кодом, надеясь, что кто-то получит выгоду.
Приведенный ниже код принимает как путь с пробелами, так и, если строки чтения имеют пробелы, он не вызывает проблем с символами после пробела;
FOR / f "tokens = * delims =," %% a in ('type "C: \ Progrem File \ My Program"') do (echo %% a)