Definición y uso de una variable en archivo por lotes


450

Estoy tratando de definir y usar una variable en un archivo por lotes. Parece que debería ser simple:

@echo off

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

El resultado que obtengo es el siguiente:

We're working with ""

¿Que está pasando aqui? ¿Por qué mi variable no se repite?

Respuestas:


552

El espacio antes del =se interpreta como parte del nombre, y el espacio después del mismo (así como las comillas) se interpretan como parte del valor. Por lo tanto, se puede hacer referencia a la variable que ha creado %location %. Si eso no es lo que desea, elimine los espacios adicionales en la definición.


77
Si el espacio anterior =se interpreta como parte del nombre, entonces no se puede hacer referencia a la variable %location%, se debe hacer referencia a ella como %location %. ¿Es eso un error tipográfico?
Variable miserable

77
@ Variable miserable: Tienes razón; Parece que la respuesta original fue víctima de una edición incorrecta.
Brian Nixon

18
Así que esto es con lo que vino MS
Falaque

55
@Falaque A diferencia de alias x = yen * nix land?
Básico

1
@Falaque, ¿qué crees que bash hará cuando se ejecute x = y?
phuclv

263

Los espacios son significativos. Creó una variable denominada 'location ' con un valor de
' "bob"'. Nota: se agregaron comillas simples para mostrar la ubicación del espacio.

Si desea cotizaciones en su valor, entonces su código debería verse así

set location="bob"

Si no desea cotizaciones, entonces su código debería verse así

set location=bob

O mejor aún

set "location=bob"

La última sintaxis evita que los espacios finales involuntarios entren en el valor y también protege contra caracteres especiales como & |etc.


8
¿Hay inconvenientes para la última sintaxis?
Wolf

8
@ Wolf - No, no hay inconveniente. Sin embargo, hay un límite para cuándo es más efectivo. Mientras el valor no contenga comillas, casi todos los caracteres pueden aparecer en el valor sin preocuparse por escapar. Las excepciones son %, y posiblemente !si la expansión retrasada está habilitada. Pero si el valor contiene comillas, entonces debe preocuparse cuando para escapar caracteres como veneno |, &etc.
dbenham

1
Esto parece ser lo mismo que configurar la variable de entorno en Windows. ¿Es esta la única forma de usar variables locales en scripts por lotes?
Parásito

1
@Wolf, es suficiente para asegurar que las extensiones de comando están habilitadas, pero esta es la configuración por defecto de todos modos ...
aschipfl

7

entrada location.bat

@echo off
cls

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

salida

We're working with bob

(errores que has hecho: spacey " ")


44
set /ppregunta al usuario y almacena la respuesta en la variable especificada. por ejemplo,set /p name="What is your name? " & echo Hello, %name%.
Robert Mooney

66
-1, la sintaxis set /p "varname"="text"es incorrecta, crea una variable llamada location"(¡con una comilla final!). Debería ser set /p location="bob". Pero incluso entonces, ya no coincide con la pregunta
jeb
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.