scripts script restaurar programas pasar parametros entorno ejemplos windows batch-file scripting environment-variables quotes

windows - script - variables de entorno ubuntu



Eliminar citas de variables de entorno con nombre en scripts de Windows (9)

Quiero almacenar un prefijo de URL en una variable de entorno de Windows. Sin embargo, los signos y símbolos en la cadena de consulta hacen que esto sea problemático.

Por ejemplo: tengo un prefijo de URL de http://example.com?foo=1&bar= y quiero crear una URL completa al proporcionar un valor para el parámetro de la bar . Entonces quiero lanzar esa URL usando el comando "inicio".

Agregar presupuestos alrededor del valor de la operación SET es bastante fácil:

set myvar="http://example.com?foo=1&bar="

Windows incluye las comillas en el valor real (gracias a Windows!):

echo %myvar% "http://example.com?foo=1&bar=true"

Sé que puedo quitar las comillas de los argumentos del archivo por lotes usando tilde:

echo %~1

Sin embargo, parece que no puedo hacerlo con las variables nombradas:

echo %~myvar% %~myvar%

¿Cuál es la sintaxis para lograr esto?


Creo que esto debería hacerlo:

for /f "tokens=*" %i in (%myvar%) do set %myvar%=%~i

Pero no necesitas esto,

set myvar="http://example.com?foo=1&bar=" start "" %myvar%

También funcionará, solo necesita proporcionar un título para el comando de inicio.


Esto funciona

for %a in (%myvar%) do set myvar=%~a

También usaría esto si quisiera imprimir una variable que contenga un símbolo y sin las comillas.

for %a in ("fish & chips") do echo %~a


Esto no es una limitación de la variable de entorno, sino del shell de comandos.

Adjunte toda la tarea entre comillas:

set "myvar=http://example.com?foo=1&bar="

Aunque si tratas de hacer eco de esto, se quejará porque el caparazón verá un quiebre allí.

Puede repetirlo adjuntando el nombre var entre comillas:

echo "%myvar%"

O mejor, simplemente use el comando set para ver los contenidos:

set myvar


Para eliminar solo las comillas inicial y final de una variable:

SET myvar=###%myvar%### SET myvar=%myvar:"###=% SET myvar=%myvar:###"=% SET myvar=%myvar:###=%

Esto supone que no tiene un ### "o" ### dentro de su valor, y no funciona si la variable es NULL.

El crédito va a http://ss64.com/nt/syntax-esc.html para este método.


Si bien ya hay varias buenas respuestas, otra forma de eliminar las comillas es usar una subrutina simple:

:unquote set %1=%~2 goto :EOF

Aquí hay un ejemplo completo de uso:

@echo off setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS set words="Two words" call :unquote words %words% echo %words% set quoted="Now is the time" call :unquote unquoted %quoted% echo %unquoted% set word=NoQuoteTest call :unquote word %word% echo %word% goto :EOF :unquote set %1=%~2 goto :EOF


Usa múltiples variables para hacerlo:

set myvar="http://example.com?foo=1&bar=" set bar=true set launch=%testvar:,-1%%bar%" start iexplore %launch%


Utilice la expansión de variable de entorno demorado y use! Var: ~ 1, -1! para eliminar las comillas:

@echo off setlocal enabledelayedexpansion set myvar="http://example.com?foo=1&bar=" set myvarWithoutQuotes=!myvar:~1,-1! echo !myvarWithoutQuotes!


echo% myvar: "=%


@echo off set "myvar=http://example.com?foo=1&bar=" setlocal EnableDelayedExpansion echo !myvar!

Esto se debe a que la variable contiene caracteres de shell especiales.