В Windows 10 с помощью команды с повышенными привилегиями я запускаю следующий пакетный файл:
@echo off
cls
for /f "tokens=1-6 delims=," %%G in ("3D Objects,Documents,Downloads,Music,Pictures,Videos") do (
echo %%G
)
Я ожидаю, что он перечислит каждый из этих шести пунктов. Вместо этого он перечисляет только первый (3D Objects), а затем останавливается. Использование "Tokens" не имеет особого значения, а "delims" не работает так, как я думал.
Вопрос:Ошибаюсь ли я, думая, что он FOR
может обрабатывать элементы списка, разделенные запятыми?
решение1
Я не думаю, что это работает так, как вы ожидаете для списка, не являющегося файлом, потому что, как указано в for /?
...
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
дескрипторы либо command
, string
, или file-set
, что, как я предполагаю file-set
, означает фактический файл. Если это так, то это означает, что помещая туда список не файлов, он интерпретируется как строка, которую и delims
не tokens
может разобрать или итерировать.
Чтобы решить эту проблему, поместите список не файлов в обычный список.длявыполните цикл без использования tokens
или delims
и убедитесь, что значения, содержащие пробел, заключены в двойные кавычки.
@echo off
cls
for %%G in ("3D Objects",Documents,Downloads,Music,Pictures,Videos) do (
echo %%~G
)
Вы можете заключить все значения в двойные кавычки и использовать ~
тильду [ ] в заполнителе переменной, чтобы извлечь двойные кавычки из выходного значения, получив желаемый вывод без двойных кавычек.
@echo off
cls
for %%G in ("3D Objects","Documents","Downloads","Music","Pictures","Videos") do (
echo %%~G
)
Выход
3D Objects
Documents
Downloads
Music
Pictures
Videos