1

Тема: CMD/BAT: Цикл for с одной строкой

Здраствуйте! Пытаюсь сладить с конструкцией for, что-то не получается.
Как сделать так чтобы в цикле перебрал значения из одной строки.

set extensionfind=dbf,cdx,dd,md
for /f "Tokens=1-10 delims=," %%a in ("%extensionfind%") do echo %%a >> 1.txt

Берет только первое значение в строке. Я понимаю что в следующих строчках %%b,%%c,%%d будут мои значения. Но количество значений меняется да и как то неудобно писать для каждого значения строчку.

set extensionfind=dbf,cdx,dd,md
for /f "Tokens=1-10 delims=," %%a in ("%extensionfind%") do (
	echo %%a >> finding.txt
	echo %%b >> finding.txt
	echo %%c >> finding.txt
	echo %%d >> finding.txt
	echo %%e >> finding.txt
)

И при таком варианте, когда пятого значения нет выдаст что режим отображения включен.

2

Re: CMD/BAT: Цикл for с одной строкой

Попробуй просто

for %%a in (%extensionfind%) do echo %%a
Забыл пароль и потерял e-mail.

3

Re: CMD/BAT: Цикл for с одной строкой

Используйте шаблон-звездочку для указания "всего остального":
либо так


for /f "tokens=* delims=," ...

либо так


for /f "tokens=1* delims=," ...
( 2 * b ) || ! ( 2 * b )

4

Re: CMD/BAT: Цикл for с одной строкой

Александр_foxware, один вариант уже указал коллега shiz. Не забывайте про возможность изменения разделителя посредством замены, например: «%var:-= %».

Второй вариант — разбор посредством вызова процедуры:

@echo off
setlocal enableextensions enabledelayedexpansion

set extensionfind=dbf;cdx;dd;md

call :Parse %extensionfind:;= %

endlocal
exit /b 0

:Parse
    setlocal enableextensions enabledelayedexpansion
:Repeat
    set sValue=%~1

    if defined sValue (
        echo [%sValue%]
        shift
        goto :Repeat
    )

    echo Done

    endlocal
    exit /b 0

Использование процедуры даёт большие возможности в плане разбора. Например, можно в начале пропустить какие-то аргументы («shift /n» в начале), можно читать только чётные или нечётные аргументы («shift /2» внутри блока разбора) и т.п.

5

Re: CMD/BAT: Цикл for с одной строкой

Большое спасибо