【问题标题】:Is It possible to set environment variable and echo it in a single line batch script?是否可以设置环境变量并在单行批处理脚本中回显它?
【发布时间】:2011-02-13 12:04:29
【问题描述】:
set A=2 && echo %A%

这不会在 Windows 中将 A 回显为 2。有什么办法吗?

A=2 ; echo $A

在 bash 中工作。我想在 Windows 上进行类似的行为

【问题讨论】:

  • 为什么要这样做?对我来说,这似乎是一个轻微的风格问题。
  • 可能需要在别名中使用?或者在生成其他脚本的脚本中简化编码。

标签: windows shell batch-file


【解决方案1】:

我相信有很多方法可以做到这一点,这里有两种:

  • setlocal ENABLEDELAYEDEXPANSION&set "foo=bar baz"&echo.!foo!&endlocal
  • set "foo=bar baz"&for /F "tokens=1,* delims==" %%A in ('set foo') do if "%%~A"=="foo" echo.%%B

编辑:为第二个解决方案添加了“过滤”设置结果的检查,感谢 Johannes Rössel

【讨论】:

  • 请注意,对于批处理文件中的变量,for 循环使用 %%X,而“终端”中仅使用 %X
  • 对于第二种变体,您应该希望没有更多以foo开头的变量。
  • 第一个打印 !foo!
  • @Kamal:你必须把它放在一个批处理文件中
【解决方案2】:

注意! 包围A 而不是%

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET A=2 & ECHO !A!
ENDLOCAL

【讨论】:

  • @Kamal 它适用于我的 XP 和 Vista。尝试复制/粘贴到 .CMD 文件中,然后在新的命令窗口中运行。
  • @Anders 我看到你确实发布了类似的代码。这么小的sn-p代码,难免有相似之处。
【解决方案3】:

添加到@Anders answers,我调整了他的解决方案,让您更加灵活:

set foo=bar&for /f %a in ('echo ^%foo^%') do @echo %a

输出:

bar

这使您也可以进行字符串替换:

set foo=bar&for /f %a in ('echo ^%foo^:a^=o^%') do @echo %a

输出:

bor

编辑:添加了一些插入符号来修复 @jeb 的评论。

【讨论】:

  • 这不可靠。如果您再次运行它,但将 bar 更改为 ccc 它仍然是 echo bar
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2012-03-19
  • 2011-04-13
  • 1970-01-01
相关资源
最近更新 更多