windows - Sådan affiner du en MS-DOS-variabel?

Indlæg af Hanne Mølgaard Plasc

Problem



Lad os sige, at jeg udfører følgende i CMD-skalen:


set FOO=bar


Er der en måde at affinde denne variabel ud over at genbruge CMD-skalen?

Bedste reference


Ja, du kan forstyrre det med


set FOO=


Eller eksplicit brug af:


set "FOO="


Sørg for, at ingen efterfølgende (usynlige) tegn kommer efter tegnet =. Det er:



  • set FOO= er forskellig fra set FOO=      .


Andre referencer 1


En sikker måde at afbryde variablen på er at bruge også citater, så er der ingen problemer med efterfølgende rum.


set FOO=bar
echo \%FOO\%
set "FOO=" text after the last quote is ignored
echo \%FOO\%

Andre referencer 2


en anden metode


@Echo oFF

setlocal
set FOO=bar
echo \%FOO\%
endlocal

echo \%FOO\%

pause


Bemærk: Dette ville ikke fungere på en interaktiv kommandoprompt. Men arbejder i batch script.

Andre referencer 3


Dette virker for mig i min Windows 7 CMD shell:


set FOO=bar
echo \%FOO\% // bar
set FOO=
echo \%FOO\% // empty; calling "set" no longer lists it

Andre referencer 4


Jeg ville kun tilbyde følgende som en kommentar, men jeg synes det er vigtigt nok at stå alene.


Mange af de tidligere svar nævnte, at man skal passe på efterfølgende rum; og det er sikkert det rigtige. Men jeg har fundet ud af, at sommetider efterfølgende rum kun vil komme ind der uanset hvad - især hvis du laver en kommandolinje-liner og har brug for pladsen som en kommandoseparator.


Dette er løsningen på dette problem:


SET FOO=Bar
echo \%FOO\%
:: outputs Bar
SET "FOO="
echo \%FOO\%
:: outputs \%FOO\%


Ved at indpakke erklæringen i dobbelt citater på den måde kan afstandsproblemet undgås helt. Dette kan også være nyttigt, når variabler oprettes ved at sammenkæde for at fjerne mellemrum - f.eks. - stier, f.eks .:


SET A=c:users && SET D=Daniel
SET P="\%a\%\%d\%"
ECHO \%P\%
:: outputs "C:Users Daniel"
:: Notice the undesirable space there