MS-DOS変数の定義を解除する方法は?


88

CMDシェルで以下を実行するとします。

set FOO=bar

CMDシェルをリサイクルする以外に、この変数の定義を解除する方法はありますか?


9
あなたは本当にMS-DOS(少なくとも10年かそこらで死んでいる)を意味しますか?それともMS-DOSを言いますが、本当にWindowsコマンドライン(cmd.exe)を意味しますか?
marc_s 2011

4
可能性は高いですが、その質問にはあまり関係ありません...
マダラの幽霊

3
マークの権利。これはMS-DOSシェルではありません。これが大きな違いであることを人々は決して知りません。
Michael-O

@MadaraUchiha、確かに、あなたのset var=答えは、Windowscmd.exeの場合とまったく同じようにMS-DOS6.22command.comでも機能します。(ただし、Windowsとは異なり、var =を二重引用符で囲むと機能しません。代わりに、名前が二重引用符で始まる環境変数が作成されます。)
Simon Kissane 2016

回答:


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 7CMDシェルで機能します。

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」の設定が解除されません。ただし、何らかの理由で、内部では(?として)重要ではありません% %
テッドホップ2011

トレーリングスペースも重要です。編集して申し訳ありませんが、あなたの担当者は270kではなく270と言ったと思います...おっと。担当者がユーザーが戻ってこないことを示唆している場合、私はよく回答を編集します。明らかに、ここではそうではありません。私の間違い。
chappjc 2015

@chappjs問題ありません、編集してくれてありがとう!どうしてそれを逃したのかわからない。
ペッカ2015

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.