O primeiro problema aqui é que a expansão non -delayed - o %…%
- é feita para toda a instrução if
, incluindo todo o bloco entre colchetes. (É um truque parser; cmd ainda considera a coisa toda uma única linha de comando.)
Em outras palavras, %…%
expansões acontecem antes do comando set
, apesar de estar acima.
O segundo problema é que a ordem de expansão atrasada / não atrasada está errada. Se você quiser "excluir a referência" de uma variável, precisará que o nome dela seja expandido não mais tarde, mas anterior; , por exemplo,
set foo=value
set bar=foo
echo !%bar%!
Já considerou outra linguagem de programação, como o PowerShell? Tem hashtables:
$prod_paths = @{
"TW" = "D:\prod_path";
}
$client = Read-Host -Prompt "Enter client"
if ($client -ceq "TW") {
echo $prod_paths.Item($client)
}