MS-DOS 변수를 정의 해제하는 방법은 무엇입니까?


88

CMD 셸에서 다음을 실행한다고 가정 해 보겠습니다.

set FOO=bar

CMD 셸을 재활용하는 것 외에이 변수를 정의 해제하는 방법이 있습니까?


9
당신은 정말로 MS-DOS (최소한 10 년 동안 죽었다)를 의미 합니까? 아니면 MS-DOS 라고 말하지만 실제로는 Windows 명령 줄 ( cmd.exe)을 의미 합니까 ?
marc_s aug

4
그럴 것 같지만 그 질문에는 그다지 중요하지 않습니다 ...
Madara 's Ghost

3
마크 말이 맞아. 이것은 MS-DOS 셸이 아닙니다. 사람들은 이것이 큰 차이라는 것을 결코 알지 못합니다.
Michael-O

@MadaraUchiha, 실제로 귀하의 set var=대답은 Windows cmd.exe에서와 마찬가지로 MS-DOS 6.22 command.com에서도 작동합니다. (단, 윈도우와는 달리 VAR 주위에 따옴표를 넣어 =하지 않습니다 작품은 대신 그의 이름 따옴표로 시작하는 환경 변수를 작성합니다.)
사이먼 Kissane

답변:


136

예, 다음으로 설정을 해제 할 수 있습니다.

set FOO=

또는 명시 적으로 다음을 사용합니다.

set "FOO="

=기호 뒤에 후행 외부 (보이지 않는) 문자가 나오지 않도록 하십시오. 그건:

  • set FOO=과 다릅니다 set FOO=      .

29

변수 설정을 해제하는 안전한 방법은 따옴표도 사용하는 것입니다. 그러면 후행 공백에 문제가 없습니다.

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

11

다른 방법

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

참고 : 대화 형 명령 프롬프트에서는 작동하지 않습니다. 그러나 배치 스크립트에서 작동합니다.


9

이것은 Windows 7 CMD 셸에서 나를 위해 작동합니다.

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

2
set명령 에서 공백은 중요합니다 . 시도 set FOO = bar하고 시도 set FOO=하면 'FOO'설정이 해제되지 않습니다. 그러나 어떤 이유로 내부에서 중요하지 않습니다 % %.
Ted Hopp 2011 년

후행 공간도 중요합니다. 편집해서 죄송합니다. 담당자가 270k가 아니라 270이라고 말한 것 같습니다. 죄송합니다. 담당자가 사용자가 돌아 오지 않는다고 제안 할 때 종종 답변을 편집합니다. 여기에서는 분명히 그렇지 않습니다. 내 실수.
chappjc 2015

@chappjs 문제 없습니다. 편집 해 주셔서 감사합니다! 내가 그것을 어떻게 놓쳤는 지 잘 모르겠습니다.
Pekka

4

나는 다음 사항을 코멘트로만 제공 할 것이지만, 그 자체만으로도 충분히 중요하다고 생각합니다.

많은 이전 답변에서 후행 공백을 조심해야한다고 언급했습니다. 그리고 그것은 사실입니다. 그러나 나는 때때로 후행 공백이 무엇이든 상관없이 거기에 들어가기를 원한다는 것을 발견했습니다. 특히 명령 줄 한 줄을 수행하고 명령 구분 기호로 공백이 필요한 경우.

이것이 그 문제에 대한 해결책입니다.

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

그런 식으로 선언을 큰 따옴표로 묶으면 공백 문제를 완전히 피할 수 있습니다. 이것은 또한 변수가 연결을 통해 생성 될 때 매우 유용 할 수 있습니다. 예를 들어 경로 사이의 공백을 제거합니다.

SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.