У меня есть цикл FOR, который делает одну строку из каждой строки в файле. Идея состоит в том, что для каждой строки есть параллельная строка во вторичном файле со значением переменной в ней. Я сделал здесь цикл, который отображает переменную, которую он читает только для целей тестирования.

for %%a in (!loadstream!) do (
    set /A "linecount=!linecount!+1"
    for /F "skip=!linecount!" %%i in (save\%1\%1.sav) do (
        echo %%i
    )
)

Первый FOR работает нормально, но тот, который в нем, не расширяет переменную. Скорее, это остается как!LineCount! и дает !linecount!" was not expected at this time. Это работает нормально, если вместо этого вы %linecount% но мне нужно, чтобы эта переменная подсчитывала единицу каждый раз, когда она повторяется, так что это не пойдет. setlocal EnableDelayedExpansion установлен, конечно.

Этот блок кода предназначен для вызова в скрипте всякий раз, когда необходимо загрузить определенный набор переменных. Я мог бы попытаться создать неуклюжий обходной путь, но я могу сказать, что это способ сделать это, и я просто не понимаю, что происходит не так.

1 ответ1

1

Кажется, что cmd не раскрывает то, что находится в поле опций for /f ; В качестве обходного пути я попытался использовать переменную цикла for /f "skip=%%n" ... и это тоже не удается расширить.

Единственное решение, которое я нашел, это сделать скип самостоятельно:

for %%a in (!loadstream!) do (
    set /A linecount=!linecount!+1
    set lineno=0
    for /F "delims=" %%i in (save\%1\%1.sav) do (
        set /A lineno+=1
        if !lineno! == !linecount! echo i: %%i
    )
)

Я добавил опцию "delims=" для принудительного чтения целых строк, так как я тестировал произвольные файлы с пробелами в строках; это не будет иметь эффекта, если в ваших файлах нет пробелов, но пропустите его, если вы хотите, чтобы в первой строке было только первое поле, чтобы другие поля %%j и т. д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .