2010-04-28 62 views
2
set A=2 && echo %A% 

这不会在窗口中将A回显为2。有什么办法可以做到吗?是否可以设置环境变量并在单行批处理脚本中回显它?

A=2 ; echo $A 

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

+0

你为什么要这样做?对我来说,这看起来像是一个小小的风格问题。 – 2010-04-28 18:43:26

+0

可能有必要在别名?或者在生成其他脚本的脚本中编写更简单的代码。 – 2010-04-28 18:55:24

回答

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

编辑:新增检查为第二个解决方案“过滤”设置结果,感谢JohannesRössel

+0

请注意,for循环在批处理文件中使用%% X,而在“终端”中使用%X – Anders 2010-04-28 20:48:46

+0

对于第二种变体,您应该希望没有更多以'foo'开头的变量。 – Joey 2010-04-29 17:00:25

+1

第一张,因为它是印刷!foo! – Kamal 2010-05-03 17:00:57

0

注意!围绕A instea d的%

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

我已经发布了类似的代码... – Anders 2010-04-29 16:17:11

+0

@Anders真的吗? – aphoria 2010-04-29 17:40:29

+0

它不适合我..它呼应! – Kamal 2010-04-29 21:06:04

0

添加到@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的评论。

+0

这不可靠。如果再次运行它,但将'bar'更改为'ccc',它仍会回显'bar' – jeb 2017-02-10 14:32:44

相关问题