首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >批处理脚本回显动态变量

批处理脚本回显动态变量
EN

Stack Overflow用户
提问于 2018-07-01 14:21:48
回答 1查看 2.8K关注 0票数 0

我的批处理脚本中有一个动态变量,我需要稍后在脚本中使用或打印它,例如

代码语言:javascript
复制
set txt1=hello world
echo %txt1%
set /a num=1
echo %txt%%num%

在本示例的第二行中,结果将是"hello world",但在最后一行中将是1,如何使用动态变量使最后一行打印"hello world“

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-01 15:39:19

不要使用算术表达式将数字字符串分配给环境变量。这在大多数情况下是无用的,尽管总是有效的。所以使用set "num=1"而不是set /a num=1。原因请阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line?上的答案

最后一个命令行需要被cmd.exe解析两次,这可以通过使用delayed或使用命令CALL来访问,如How does the Windows Command Interpreter (CMD.EXE) parse scripts?上的answer详细说明

使用命令调用解决方案

代码语言:javascript
复制
set "txt1=hello world"
echo %txt1%
set "num=1"
call echo %%txt%num%%%

最后一行首先处理到call echo %txt1%,然后第二次处理,因为命令调用echo hello world,最后由cmd.exe执行。

使用delayed expansion的第二种解决方案

代码语言:javascript
复制
setlocal EnableDelayedExpansion
set "txt1=hello world"
echo %txt1%
set "num=1"
echo !txt%num%!
endlocal

倒数第二行首先被处理为echo !txt1!,由于执行批处理文件时环境变量扩展到echo hello world的延迟,第二次处理将被处理。

要了解所使用的命令及其工作原理,请打开命令提示符窗口,在那里执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • call /?
  • echo /?
  • endlocal /?
  • set /?
  • setlocal /?

有关命令SETLOCALENDLOCAL的详细信息,请阅读this answer

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51120907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档