【问题标题】:Windows CMD Set variable with space in variable nameWindows CMD 在变量名中设置带有空格的变量
【发布时间】:2017-12-15 12:24:39
【问题描述】:

为了使我的批处理文件可读,我尝试将SET 语句对齐如下

SET SVN_URL           = http://server.test.com
SET SVN_USER_NAME     = foo
SET SVN_USER_PASSWORD = pass

当我尝试回显%SVN_URL% 时,我什么也没得到。我发现变量名可以有空格https://ss64.com/nt/set.html

所以我的变量将是%SVN_URL %(带空格)

有什么办法可以解决吗?!

【问题讨论】:

  • 啊...去掉空格怎么样??
  • 在使用set 命令时,您确实希望完全避免= 周围的空格;如果您想要可读的文档,请始终将您的 set 语句格式化为 set varname=value 并添加 cmets(rem 语句)。
  • 如果您需要大量对齐等号,则 var 名称前面的空格没有问题 ;-) 为避免 varname 或内容中无意的前导/尾随空格,我将它们双引号Set "SVN_URL=http://server.test.com"
  • 是的,在我的命令中等号周围没有空格。设置后的空格数无关紧要Set "SVN_URL=http://server.test.com",但会被本网站删除;-)

标签: batch-file cmd environment-variables


【解决方案1】:

问题在于set

两边上的空格都很重要

这将设置您的值(注意每个值将包含一个前导空格)

SET           SVN_URL= http://server.test.com
SET     SVN_USER_NAME= foo
SET SVN_USER_PASSWORD= pass

for /f "tokens=1*delims== " %%a in (SVN_URL           = http://server.test.com) do set "%%a=%%b"
for /f "tokens=1*delims== " %%a in (SET SVN_USER_NAME     = foo) do set "%%a=%%b"
for /f "tokens=1*delims== " %%a in (SET SVN_USER_PASSWORD = pass) do set "%%a=%%b"

call :setv SVN_URL           = http://server.test.com
call :setv SVN_USER_NAME     = foo
call :setv SVN_USER_PASSWORD = pass

...
:setv
set "%~1=%~2"
goto :eof

请注意,最后,您可能需要将值括在引号中。

【讨论】:

    【解决方案2】:

    与 Magoo 的第一个版本类似,您可以对齐等号以适合您的审美或其他。

    SET           "SVN_URL=http://server.test.com"
    SET     "SVN_USER_NAME=foo"
    SET "SVN_USER_PASSWORD=pass"
    

    在评论中删除了过多的空白,所以我无法演示。

    【讨论】:

      猜你喜欢
      • 2015-06-07
      • 2015-11-27
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-24
      • 2020-06-22
      • 1970-01-01
      相关资源
      最近更新 更多