#batch-file #for-loop #cmd #iteration #token
#пакетный файл #цикл for #cmd #итерация #токен
Вопрос:
Я пытаюсь выполнить простую итерацию по строке, используя мой разделитель. Я немного запутался в том, как это работает. Я хочу взять каждый токен и фактически добавить его в свой собственный путь, поэтому мне нужно обработать их отдельно. Как мне выполнять итерации по списку токенов до тех пор, пока их больше не останется для цикла, или подсчитывать свои токены перед циклом, чтобы я мог ввести точку остановки? Я здесь потерялся…
В принципе, мне нужен способ получить доступ к каждому расширению файла в этом списке, размер которого я не буду знать, пока не введу данные непосредственно перед этим.
Я перепробовал все, что смог придумать. Возможно, я не понимаю, как работают циклы cmd
for /f "delims=, " %%i in ("*.ok, *.pl, *.jc, *.ff") do (
echo %%i
)
Комментарии:
1. С помощью for / f вы разбиваете на токены (по умолчанию tokens = 1), чтобы получить все, что вам нужно «tokens = 4delims = «, а затем используете %%i для %%l. Вероятно, вы имели в виду простое for и заключали в кавычки каждый элемент, поскольку они не были расширены.
for %%i in ("*.ok", "*.pl", "*.jc", "*.ff") do echo %%i
2. Да,
for /F
разбивает строку на токены, но не выполняет итерацию по ним, она возвращает все указанные токены (по умолчанию:tokens=1
) за одну итерацию цикла (например, havingtokens=1-3
возвращает 1-й токен в%%i
, 2-й в%%j
и 3-й в%%k
, когда%%i
это явно указано передin
);delims
опция определяет все символы , не строки, которые используются для разделения токенов, поэтому вы указываете запятую и пробел; последовательные разделители используются как один; введитеfor /?
войдите в окно командной строки и прочитайте текст справки…3. Обратите внимание, подстановочные знаки расширены:
for %%i in (*.ok) do echo %%i will list all files matching the mask
*.ok` (то же, чтоdir /b *.ok
) Вы можете (а можете и не) захотеть переключиться наfor %%i in (ok pl jc ff) do echo *.%%i