【问题标题】:Batch scripting: Why does this print "= instead of the empty string?批处理脚本:为什么打印“=”而不是空字符串?
【发布时间】:2016-07-11 14:44:55
【问题描述】:

我正在尝试使用批处理中的参数扩展来删除某些文本中的引号。谁能告诉我这是为什么:

@echo off
setlocal

set args=%*
echo %args:"=%

打印"= 而不是什么都没有?据我所知,%args:"=% 应该将所有引号都替换为空,所以我不明白为什么会这样。

任何帮助将不胜感激,谢谢!

编辑:为了澄清,我没有将任何参数传递给批处理脚本。

【问题讨论】:

  • 无法复制。它可以在我的电脑上运行,除非没有传递任何参数
  • @LưuVĩnhPhúc 我也没有将任何参数传递给脚本。也许这就是问题的一部分?

标签: windows batch-file cmd windows-10 command-prompt


【解决方案1】:

这是您不向脚本传递任何参数时得到的结果。

如果args没有定义,那么%args:"=%扩展如下:

  • %args: 被视为不存在的变量扩展,它什么都不是
  • "= 被视为自身
  • %(一个单独的百分比)被剥夺了

这并不直观,但这恰好是 cmd.exe 的工作方式。请参阅https://stackoverflow.com/a/7970912/1012053 了解更多信息。

您可以使用if defined 来防止该问题

@echo off
setlocal

set args=%*
if defined args echo %args:"=%

【讨论】:

  • 非常简洁的解释。感谢您的回答!
【解决方案2】:

在这里工作

C:\Windows\system32>"C:\Users\User\Desktop\Test2.bat" dog
dog

删除回声显示此

C:\Windows\system32>setlocal

C:\Windows\system32>set args=dog

C:\Windows\system32>echo dog
dog

您没有传递任何命令行参数。

C:\Windows\system32>"C:\Users\User\Desktop\Test2.bat"

C:\Windows\system32>setlocal

C:\Windows\system32>set args=

C:\Windows\system32>echo "=
"=

【讨论】:

  • 您的示例中的参数没有任何引号
  • 我复制了他的症状。
猜你喜欢
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多