Пакетное замедленное расширение не работает - PullRequest
2 голосов
/ 19 ноября 2009

Хорошо, я схожу с ума, и я не знаю, что еще делать, я пробовал несколько вещей, и ничего не работает.

Посмотрите на этот пример кода (test.cmd):

setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
    set VAR=after;
    if "%VAR%" == "after" @echo If you see this, it worked
)

Это сгенерированный вывод:

D:\>ver

Microsoft Windows [Version 6.1.7600]

D:\>test.cmd

D:\>setlocal enabledelayedexpansion enableextensions

D:\>set VAR=before

D:\>if "before" == "before" (
set VAR=after;
 if "before" == "after"
)

D:\>

Я что-то не так делаю?

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

РЕДАКТИРОВАТЬ: новый код и вывод:

test.cmd:

@echo off
setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
   set VAR=after;
   if "!VAR!" == "after" (
      echo It worked.
   ) else (
      echo It didn't work.
   )
)

Выход:

D:\>test.cmd
It didn't work.

D:\>

Ответы [ 4 ]

14 голосов
/ 19 ноября 2009

Вы должны использовать !var! для отложенного расширения. %var% всегда расширяется на этапе анализа.

Т.е., измените свой код на

setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "!VAR!" == "after" @echo If you see this, it worked
)
1 голос
/ 08 ноября 2018

В начале запроса cmd необходимо ввести «CMD / V» ИЛИ «CMD / V: ON»

После этого тестирования код должен работать

SETLOCAL EnableDelayedExpansion
Set "_var=first"
Set "_var=second" & Echo %_var% !_var!

Вы должны увидеть вывод «первая секунда» sample cmd prompt screen

1 голос
/ 24 ноября 2010

не использовать ==, в пакете вы должны использовать EQU

Например, напишите:

if %bla% EQU %blub% echo same
0 голосов
/ 08 марта 2013

Я нашел вашу проблему.

set VAR=after;

удалить ; из кода выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...