1

Я получаю "/ было неожиданно в это время." при использовании ниже для цикла for только в некоторых случаях.

for /f "tokens=1,* delims=;" %%m in (file.txt) do (
    echo Inside Loop
    echo %%m
)

Я вызываю этот пакетный файл из другого пакетного файла в цикле. Поэтому каждый раз содержимое файла file.txt подлежит изменению.

Является ли содержимое файла проблемой?

Это полный скрипт:

echo off
SET FileName=%2
SET NUM=%3
:label
echo.
echo Parsing file.txt file
for /f "tokens=1,* delims=;" %%m in (file.txt) do (     
    echo Inside Loop
            SetLocal EnableDelayedExpansion
    echo %%n
    SET str=%%m     
    SET "Number=!str::="^&REM #!
    IF "!NUM!"=="" SET NUM="!number!"       
    if !number! GEQ !NUM! (
        if /I not "!str:(ind)=!"=="!str!" (
                echo It contains IND
        ) else >>"!FileName!" echo %1;!str!

    echo %%n>Label_Name.txt
    goto label 
    )
    endlocal
)
:end

3 ответа3

1

Без указания содержимого вашего файла или параметров, которые вы выполняете в этом пакете, это просто догадки, но я подозреваю, что эта строка:

IF "!NUM!"=="" SET NUM="!number!"       

который установит NUM в кавычки.

Возможно, лучший код будет

if not defined num set "num=!number!"

но также - вы используете GOTO label в SETLOCAL enabledelayedexpansion которое AFAIAA НЕ завершает в LOCAL среде, следовательно, вся последующая обработка будет выполняться с использованием SETLOCAL и delayedexpansion . Можно повторно выполнить SETLOCAL Enable... несколько раз, создавая все большую и большую глубину локальной среды .... Лучше всего исправлено ИМХО.

0

попробуй это:

@echo off&setlocal
for /f "tokens=1,* delims=;" %%m in (file.txt) do (
    set "line=%%m"
    echo Inside Loop
    setlocal enabledelayedexpansion
    echo !line!
    endlocal
)
0

только для некоторых случаев

Было бы полезно узнать больше о том, что это за дела. Без дальнейших подробностей вопрос (в его нынешней форме) весьма склонен к ответам, которые предполагают спекуляции.

Вот один, например:

Если вы наберете FOR /?, Вы обнаружите, что /F описывается в разделе, который говорит:

Если включены расширения команд, поддерживаются следующие дополнительные формы команды FOR:

Согласно документации CMD, запуск CMD /E:ON активирует расширения командной строки. Затем в документации сторонних производителей отмечается, что запуск CMD /Y может использоваться для отключения расширений команд из CMD (а CMD /X может использоваться для повторного включения).

Так что, если вы обнаружите, что запуск пакетного файла работает в некоторых случаях, но «FOR /F», кажется, не распознает эту опцию в других случаях, проблема может быть не вызвана фактическим исходным кодом, который вы цитируете. Проблема может быть вызвана средой, в которой выполняется код.

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