set mydir=%CD%
echo %CD%
C:\Stuff\More Stuff\Lots of Stuff
Так как следует использовать переменную? Обычно весь путь может быть заключен в кавычки, но как насчет переменной?
for /f %G in (%mydir%\file.txt) DO (echo %G)
set mydir=%CD%
echo %CD%
C:\Stuff\More Stuff\Lots of Stuff
Так как следует использовать переменную? Обычно весь путь может быть заключен в кавычки, но как насчет переменной?
for /f %G in (%mydir%\file.txt) DO (echo %G)
Ключ является правильной цитатой. Следующий синтаксис - единственный безопасный способ установки переменной - если значение не содержит кавычек само по себе, и command extensions are enabled (что по умолчанию по умолчанию, и почти нет ситуаций, когда нарушаются ограничения команд):
set "myDir=%CD%"
Кавычки не становятся частью ценности таким образом.
Чтобы использовать значение в for /F
цикле, как вы пытаетесь сделать ваш вопрос, использовать это (не забудьте удвоить %
знаки в пакетном файле):
for /F "usebackq" %G in ("%myDir%\file.txt") do (echo %~G)
option usebackq
теперь требуется для того, для цитируемого пути не следует рассматривать как литеральную строку.
EDIT: Это бывший ответ, прежде чем я заметил /F
опцию в команде for
.
я не удалить его, потому что может быть полезным в случае, если используется стандартный for
цикл:
Чтобы использовать значение в for
цикле, как вы пытаетесь сделать ваш вопрос, использовать это (не забудьте удваивать %
знаки в пакетном файле):
for %G in ("%myDir%\file.txt") do (echo %~G)
~
modifier удаляет кавычки из значения.
Чтобы обеспечить расширенное значение всегда в кавычках, используйте:
for %G in ("%myDir%\file.txt") do (echo "%~G")
В общем, пути всегда должен быть указан для того, чтобы избежать проблем с белыми-пространствами, а также другими специальными символами.Например, %myDir%
держит путь, как D:\Docs & Data
, командная строка echo D:\Docs & Data
повторяет строку D:\Docs
ПРОСТРАНСТВО и пытается выполнить команду с именем Data
, который не существует (скорее всего), потому что &
symbol имеет особое значение, а именно для конкатенации две отдельные команды в одной строке. Цитирование пути, такого как echo "D:\Docs & Data"
, позволяет избежать этой проблемы (хотя кавычки также возвращаются echo
, но они игнорируются командами, которые принимают аргументы пути, например cd
или copy
).
Это не сработало для меня. Вот вывод: ** C: \ Users \ USER \ Desktop \ Batch ** Каталог: ** C: \ Users \ USER \ Desktop \ Тестирование партии ** – NSV
Код в вопросе будет читать файл по очереди, пока они не являются пробелами в имени файла. Помещение котировок вокруг него теперь обрабатывает его как строку, если вы не используете опцию 'usebackq' для чтения файла. Поэтому нам нужно знать, что такое намерения пользователей. – Squashman
@NSV, по умолчанию команда FOR будет использовать пробел как разделитель, чтобы обрезать строку, которую она обрабатывает. Вам просто нужно добавить опцию delims в код, чтобы она не использовала разделителей. 'for/f" delims = "% G in ("% myDir% \ file.txt ") do (echo"% ~ G ")' – Squashman
Используйте либо это:
set mydir="%CD%"
echo %mydir%
или в случае
set "mydir=%CD%"
echo "%mydir%"
for /f "usebackq delims=" %%G in ("%mydir%\file.txt") DO echo %%G
петли, хотя я не увидел никакой пользы в не используя
echo "%__CD__%"
for /f "usebackq delims=" %%G in ("%__CD__%file.txt") DO echo %%G
Зачем устанавливать то, что вам не нужно?
Попробуйте: 'for/f% G in ("% mydir% \ file.txt ") do (echo% ~ G)'; кроме того, измените 'set mydir =% CD%' на 'set 'mydir =% CD%" ' – aschipfl