set var1=Demo
set var2=%var1%
echo %var2%
rem Output:Demo
Por que set var2
abaixo não funciona se estiver na mesma linha set var1
?
set var1=& set var2=
set var1=Demo& set var2=%var1%
echo %var2%
rem output:%var1%
Como posso set var2
partir var1
de uma linha?
Atualização --- (04/04/2024)
código simples de Neil
@echo off
set var1=Demo& call set var2=%%var1%%
echo %var2%& pause
e com atraso de DavidPostill
@echo off
setlocal enabledelayedexpansion
set var1=Demo& set var2=!var1!
echo %var2%& pause
Ambos funcionam corretamente.
A substituição da variável é feita em toda a linha de comando antes da linha ser executada. Nesse momento, a
var1
variável ainda não está definida.As regras para uma substituição de variável indefinida são:
%var1%
Você precisa dividir essa linha em duas linhas para
var1
ter um valor. Ou veja a resposta de @DavidPostill.Por que não funciona
set var2
se estiver na mesma linha comset var1
?Como harrymc aponta:
Você pode contornar essa limitação usando expansão atrasada:
Exemplo:
Leitura adicional
Você pode fazer isso sem usar Delayed Expansion (sem "
setlocal enabledelayedexpansion
"), usando um "for" (loop) com "call".A saída:
Você pode até adicionar um segundo loop “for” para fazer o “echo var2” na mesma linha:
A saída "Final":
Aqui está o detalhamento de "for" e "call":