Wie entferne ich die Definition einer MS-DOS-Variablen?

87

Nehmen wir an, ich führe Folgendes in der CMD-Shell aus:

set FOO=bar

Gibt es eine andere Möglichkeit, diese Variable aufzuheben, als die CMD-Shell zu recyceln?

user288004
quelle
9
Meinen Sie wirklich MS-DOS (das seit mindestens 10 Jahren tot ist) - oder sagen Sie MS-DOS, aber wirklich die Windows-Befehlszeile ( cmd.exe)?
marc_s
4
Wahrscheinlich, aber für diese Frage spielt es keine Rolle ...
Madaras Geist
3
Marc hat recht. Dies ist nicht die MS-DOS-Shell. Die Leute lernen nie, dass dies ein großer Unterschied ist.
Michael-O
@ MadaraUchiha, In der Tat set var=funktioniert Ihre Antwort unter MS-DOS 6.22 command.com genauso wie unter Windows cmd.exe. (Im Gegensatz zu Windows funktioniert das Setzen von doppelten Anführungszeichen um var = jedoch nicht. Stattdessen wird eine Umgebungsvariable erstellt, deren Name mit einem doppelten Anführungszeichen beginnt.)
Simon Kissane

Antworten:

136

Ja, Sie können es mit deaktivieren

set FOO=

Oder explizit verwenden:

set "FOO="

Stellen Sie sicher, dass keine nachfolgenden (unsichtbaren) Zeichen hinter dem =Zeichen stehen. Das ist:

  • set FOO=ist anders als set FOO=      .
Madaras Geist
quelle
29

Eine sichere Möglichkeit, die Variable zu deaktivieren, besteht darin, auch Anführungszeichen zu verwenden. Dann gibt es keine Probleme mit nachgestellten Leerzeichen.

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

eine andere Methode

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

Hinweis: Dies würde an einer interaktiven Eingabeaufforderung nicht funktionieren. Funktioniert aber im Batch-Skript.

walid2mi
quelle
9

Dies funktioniert für mich in meiner Windows 7 CMD-Shell:

set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
Pekka
quelle
2
Leerzeichen sind im setBefehl von Bedeutung. Wenn Sie es versuchen set FOO = barund dann versuchen set FOO=, wird 'FOO' nicht deaktiviert. Aus irgendeinem Grund sind sie jedoch im Inneren nicht (als?) Bedeutend % %.
Ted Hopp
Der nachgestellte Raum ist ebenfalls wichtig. Entschuldigung für die Bearbeitung, ich dachte, Ihr Repräsentant sagte 270, nicht 270k ... oops. Ich bearbeite häufig Antworten, wenn der Vertreter vorschlägt, dass der Benutzer nicht zurückkommt. Offensichtlich nicht der Fall hier. Mein Fehler.
Chappjc
@chappjs kein Problem, danke für die Bearbeitung! Ich bin mir nicht sicher, wie ich das verpasst habe.
Pekka
4

Ich würde das Folgende nur als Kommentar anbieten, aber ich denke, es ist wichtig genug, um für sich allein zu stehen.

In vielen der vorherigen Antworten wurde erwähnt, dass man sich vor Leerzeichen hüten muss. und sicher ist das wahr. Ich habe jedoch festgestellt, dass nachfolgende Leerzeichen manchmal nur dort hineingelangen möchten, egal was passiert - insbesondere, wenn Sie einen Befehlszeilen-Einzeiler ausführen und das Leerzeichen als Befehlstrennzeichen benötigen.

Dies ist die Lösung für dieses Problem:

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

Wenn Sie die Deklaration auf diese Weise in doppelte Anführungszeichen setzen, kann das Abstandsproblem vollständig vermieden werden. Dies kann auch sehr nützlich sein, wenn Variablen durch Verketten erstellt werden, um Leerzeichen zwischen beispielsweise Pfaden zu entfernen, z.

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