Domanda

Voglio archiviare un prefisso URL in una variabile di ambiente Windows. Le e commerciali nella stringa di query rendono questo problema però.

Ad esempio: ho un prefisso URL http://example.com?foo=1&bar= e desidero creare un URL completo fornendo un valore per la barra . Vorrei quindi avviare quell'URL usando " start " comando.

L'aggiunta di virgolette attorno al valore per l'operazione SET è abbastanza semplice:

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

Windows include tuttavia le virgolette nel valore reale (grazie a Windows!):

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

So che posso rimuovere le virgolette dagli argomenti dei file batch usando tilde:

echo %~1

Tuttavia, non riesco a farlo con variabili nominate:

echo %~myvar%
%~myvar%

Qual è la sintassi per raggiungere questo obiettivo?

È stato utile?

Soluzione

Questa non è una limitazione della variabile d'ambiente, ma piuttosto la shell dei comandi.

Racchiudi l'intero incarico tra virgolette:

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

Anche se provi a fare eco, si lamenterà perché la shell vedrà una pausa lì dentro

Puoi echeggiarlo racchiudendo il nome var tra virgolette:

echo "%myvar%"

O meglio, basta usare il comando set per visualizzare i contenuti:

set myvar

Altri suggerimenti

echo% myvar: " =%

Funziona

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

Lo userei anche se volessi stampare una variabile contenuta e commerciale senza virgolette.

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

Mentre ci sono già diverse risposte valide, un altro modo per rimuovere le virgolette è usare una semplice subroutine:

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

Ecco un esempio di utilizzo completo:

@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 l'espansione della variabile d'ambiente ritardata e usa! var: ~ 1, -1! per rimuovere le virgolette:

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

Per rimuovere solo le virgolette iniziali e finali da una variabile:

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

Questo presuppone che tu non abbia ### " o " ### all'interno del tuo valore e non funziona se la variabile è NULL.

Il credito va a http://ss64.com/nt/syntax-esc.html per questo metodo.

Usa più variabili per farlo:

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

set bar=true

set launch=%testvar:,-1%%bar%"

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

Questo perché la variabile contiene caratteri shell speciali.

Penso che questo dovrebbe farlo:

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

Ma non ti serve,

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

Funzionerà anche tu, devi solo fornire un titolo al comando start.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top