web-dev-qa-db-ja.com

Windowsのechoコマンドがユーザー設定変数をエコーできない

CMDシェルを台無しにするために何をしましたか? Windows XP Pro、cmdウィンドウを開いて次を実行:

C:\>set tt = name

C:\>set tt
tt = name

C:\>echo %tt%
%tt%

C:\>echo %time%
14:13:28.67

何らかの理由でechoコマンドが機能しません。組み込み変数をうまくエコーできます。別のコンピューターで試してみましたが、期待どおりに機能します

16
jacobsee

setコマンドはスペースを取りません。適切な構文は次のとおりです。

set tt=name

この例では、環境変数tt<space>を設定しています。それを念頭に置いて、これを試すことができます:

echo %tt%

そしてあなたの出力を見てください。

36
akf

等しい間にスペースを入れずに変数を設定してみましたか? (tt = nameを設定)

5
Eric

ここで最も賛成された答えは、はるか以前に受け入れられており、

setコマンドはスペースを取りません。」

しかし、それは正しくありません。_%tt %_変数は実際に機能します。設定および参照できます。 (それにもかかわらず混乱します。)

問題の再現:

確かに、私のWin7では:

_C:\>set os
OS=Windows_NT

C:\>set tt = name
C:\>set tt2= name
C:\>set tt3=name
C:\>set tt
tt = name
tt2= name
tt3=name
_

私は試してみました:

_C:\>echo "%os%"
"Windows_NT"

C:\>echo "%tt3%"
"name"
C:\>echo "%tt2%"
" name"
C:\>echo "%tt%"
"%tt%"
_

解決されたケース:

直感的に期待される変数_%tt%_が設定されていません。 ただし、代わりに_%tt %_が設定されます:

_C:\>echo "%tt %"
" name"
_

さらに、値の末尾にスペースを入れると、_set tt4 = name_:

_C:\>echo "%tt4 %"
" name "
_

結論:

setコマンドはtrim()を実行しません:

  • 「=」の前のスペースは_var_name_に含まれています。
  • 「=」の後のスペースは_var_value_に含まれます。
  • _var_value_の末尾のスペースが含まれます。

一方:

  • _var_name_の先頭のスペースは含まれていません。これは、一般的なコマンドライン引数ではかなり正常です。
3
Franta