Definindo e Utilizando uma Variável no Arquivo em Lote


450

Estou tentando definir e usar uma variável em um arquivo em lotes. Parece que deve ser simples:

@echo off

set location = "bob"
echo We're working with "%location%"

A saída que recebo é a seguinte:

We're working with ""

O que está acontecendo aqui? Por que minha variável não está sendo ecoada?

Respostas:


552

O espaço antes de =é interpretado como parte do nome e o espaço depois dele (bem como as aspas) é interpretado como parte do valor. Portanto, a variável que você criou pode ser referenciada %location %. Se não é isso que você deseja, remova os espaços extras na definição.


7
Se o espaço anterior =for interpretado como parte do nome, a variável não poderá ser referenciada como %location%, ela deverá ser referenciada como %location %. Isso é um erro de digitação?
Variável miserável

7
@ Variável miserável: Você está certo; parece que a resposta original foi vítima de uma edição incorreta.
Brian Nixon

18
Então é isso que a MS veio com
Falaque

5
@Falaque Em oposição à alias x = yterra * nix?
Basic

1
@Falaque então o que você acha que o bash fará ao executar x = y?
Phuclv

263

Os espaços são significativos. Você criou uma variável nomeada 'location ' com um valor de
' "bob"'. Nota - aspas simples anexadas foram adicionadas para mostrar a localização do espaço.

Se você deseja aspas no seu valor, seu código deve se parecer com

set location="bob"

Se você não quiser aspas, seu código deve parecer

set location=bob

Ou melhor ainda

set "location=bob"

A última sintaxe impede que espaços à direita inadvertidos cheguem ao valor e também protege contra caracteres especiais como & |etc.


8
Existem desvantagens para a última sintaxe?
Lobo

8
@ Wolf - Não, não há desvantagem. No entanto, há um limite para quando é mais eficaz. Contanto que o valor não contenha aspas, quase todos os caracteres podem aparecer no valor sem se preocupar em escapar. As exceções são %e, possivelmente, !se a expansão atrasada estiver ativada. Mas, se o valor não contém aspas, então você deve se preocupar quando para escapar caracteres veneno como |, &, etc.
dbenham

1
isso parece ser o mesmo que definir a variável de ambiente no Windows. Essa é a única maneira de usar variáveis ​​locais em scripts em lote?
parasrish

1
@Wolf, você só tem que garantir que as extensões de comando estão ativadas, mas esta é a configuração padrão de qualquer maneira ...
aschipfl

7

entrada location.bat

@echo off
cls

set /p "location"="bob"
echo We're working with %location%
pause

resultado

We're working with bob

(erros que você fez: spacee " ")


4
set /psolicita ao usuário e armazena a resposta na variável especificada. por exemplo,set /p name="What is your name? " & echo Hello, %name%.
Robert Mooney

6
-1, a sintaxe set /p "varname"="text"está incorreta, ela cria uma variável chamada location"(com uma citação à direita!). Deveria ser set /p location="bob". Mas, mesmo assim, ele não coincide com a questão mais
jeb
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.