windows - 批处理脚本 : Why does this print "= instead of the empty string?

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

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

@echo off
setlocal

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

prints "= 而不是什么都没有?据我所知,%args:"=% 应该将所有引号替换为空,所以我不明白为什么这正在发生。

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

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

最佳答案

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

如果未定义args,则%args:"=%展开如下:

  • %args:被当做一个不存在的变量展开,变成nothing
  • "= 被当作它自己
  • %(单独的百分比)被剥离

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

您可以通过使用 if defined 来防止这个问题

@echo off
setlocal

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

关于windows - 批处理脚本 : Why does this print "= instead of the empty string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36192919/

相关文章:

xml - 使用 sed(Windows + cygwin 和 Linux)更新 xml 属性?

c++ - 使用C++编程时,我应该如何在win32中创建一个子窗口?

windows - 如何通过命令提示符禁用和启用 USB 端口?

windows - 如何使用 cmd 在最小化窗口中启动 Windows 10 应用程序?

windows - 在新的 CMD 实例中自动启动程序

java - 检查默认java安装版本是否大于1.x的DOS脚本

ASP.NET libwebp.dll 如何将 WebP 图像保存到磁盘

batch-file - 批量德语符号

c - 在 C 程序中打开批处理文件 (.bat)?

windows - 通过另一个 Windows 服务器上的批处理文件在远程 Windows 服务器上执行批处理文件