È possibile utilizzare due modi diversi
utilizzare la sintassi estesa di set
con le citazioni set "var=content"
definiranno var con il contenuto, contenuto è citato caratteri così speciali non sono problematici e utilizza il contenuto fino alla ultima citazione (senza la citazione in sé)
@echo off
set a=some value with (parentheses) inside
if 1 == 1 (
set "PATH=%a%"
)
Usa ritardato di espansione (come la risposta di shf301), ma anche trasferire il valore per la portata principale.
@echo off
setlocal enabledelayedexpansion
set a=some value with (parentheses) inside
if 1 == 1 (
set "localScope_PATH=!a!"
rem now transfer it to the global scope
FOR /F "delims=" %%A in ("!localScope_PATH!") DO (
endlocal
set "path=%%A"
)
)
In questo caso l'esteso set-sintassi non è necessario, ho utilizzato solo per evitare spazi nascosti alla fine linea.
EDIT: Posso combinare questo con enabledelayedexpansion setlocal e l'utilizzo! invece di% a pigro valuta il valore della variabile? Quando ho provato ho ottenuto)! era inaspettato in questo momento.
È possibile, ma è controindicata produttivo, come
@echo off
Setlocal EnableDelayedExpansion
set a=some value with (parentheses) inside
if 1 == 1 (
set PATH=!a:^)=^^^)!
set path
)
Allora il vostro percorso contiene CARETS davanti alla )
come C:\programs (x86^)
Per capire come funziona l'espansione si può leggere SO:How does the Windows Command Interpreter (CMD.EXE) parse scripts?
EDIT2: più problemi con il percorso (contenente virgolette)
In base a questo question, può verificarsi un altro problema con la parentesi quando il percorso contiene citazioni.
Esempio
path="C:\Program Files (x86)";C:\Program Files (x86)\Skype
Ciò è consentito, anche se non è necessario usare le virgolette qui, ma questo distrugge l'estesa SET
sintassi, come ora set "newPath=%path%"
espande a
set "newPath="C:\Program Files (x86)";C:\Program Files (x86)\Skype"
Ora almeno una parentesi non è tra virgolette ed è in grado di rompere un blocco di comando.
Ma è possibile semplicemente rimuovere tutte le virgolette dalla variabile percorso, come detto, le virgolette non sono necessarie qui.
set "newPath=%path:"=%"
'set" var = content "' - chi può averlo indovinato? :) –
* In questo caso la sintassi di set estesa non è necessaria * Potresti spiegare? –
Lo preferisco, in quanto evita problemi con gli spazi nascosti alla fine della linea – jeb