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.