Я пытаюсь вытащить первую строку файла .txt и назначить ее переменной, но внутри цикла. Моя переменная не была назначена правильно. Постоянно показывает "ЭХО выключено". Однако, когда цикл возвращается, он отображается правильно, хотя это тот же код. Как я могу заставить его отображать мой текст, который я хочу в первый раз?
Код:
@Echo off
:ReadLoop
if exist "<Full\Path\Name>\Note0.txt" (
set /p Var=<"<Full\Path\Name>\Note0.txt"
Echo %Var%
pause>nul
goto :ReadLoop
)
Результат, который я получаю, таков:
Echo is off.
Note0 Content
Note0 Content
Note0 Content
Ответ 1 · рейтинг 1 · rojo
Всякий раз, когда вы set используете переменную в блоке кода в скобках, если вы хотите получить эту переменную в том же блоке кода, вы должны сделать это в стиле отложенного раскрытия. Например:
set "test=apples"
(
set "test=oranges"
echo %test%
)
... будет отображать "яблоки", потому что это значение переменной test было при достижении блока кода. С другой стороны,
set "test=apples"
(
set "test=oranges"
setlocal enabledelayedexpansion
echo %test% and !test!
endlocal
)
будет повторять "яблоки и апельсины", потому что расширение !test! задерживается, а %test% - нет. В окне консоли setlocal /? для получения дополнительной информации.
Теперь примените эти знания к своему коду.
@Echo off
setlocal
:ReadLoop
if exist "<Full\Path\Name>\Note0.txt" (
set /p Var=<"<Full\Path\Name>\Note0.txt"
setlocal enabledelayedexpansion
Echo !Var!
endlocal
pause>nul
goto :ReadLoop
)
... даст вам ожидаемый результат. Вы можете активировать enabledelayedexpansion в начале вашего скрипта чуть ниже @echo off, но это может иногда иметь неблагоприятные последствия при установке значений переменных, если эти значения содержат восклицательные знаки. В любом случае, не стесняйтесь, но помните мое предупреждение, если вы когда-нибудь столкнетесь с проблемами.