使用Windows批处理文件中的命令结果设置变量的值

在Bash环境中工作时,通常要执行以下命令来设置变量的值:


var=$(command -args)

var该命令设置的变量在哪里command -args。然后,我可以通过访问该变量$var。


与几乎所有的Unix shell兼容的更常规的实现方法是:


set var=`command -args`

就是说,如何在Windows批处理文件中通过命令的结果设置变量的值?我试过了:


set var=command -args

但是我发现它var被设置为command -args而不是命令的输出。


开满天机
浏览 1087回答 3
3回答

月关宝盒

要执行Jesse描述的操作,需要从Windows批处理文件中编写:for /f "delims=" %%a in ('ver') do @set foobar=%%a 但是,如果您习惯使用Unix类型的脚本,我建议在Windows系统上使用Cygwin。

慕后森

由于Windows批处理命令,因此需要特别小心:for /f "delims=" %%a in ('command') do @set theValue=%%a与Unix shell语句的语义不同:theValue=`command`考虑命令失败导致错误的情况。在Unix Shell版本中,仍然会继续分配“ theValue”,所有先前的值都将替换为空值。在Windows批处理版本中,处理错误的是“ for”命令,并且永远不会到达“ do”子句-因此,将保留“ theValue”的任何先前值。为了在Windows批处理脚本中获得更多类似Unix的语义,必须确保进行分配:set theValue=for /f "delims=" %%a in ('command') do @set theValue=%%a将Unix脚本转换为Windows批处理时未能清除变量的值可能是导致细微错误的原因。

慕妹3242003

当我在批处理文件中需要数据库查询结果时,这是我的处理方法:sqlplus -S schema/schema@db @query.sql> __query.tmpset /p result=<__query.tmpdel __query.tmp密钥在第2行中:“ set / p”通过“ <”重定向运算符将“ result”的值设置为“ __query.tmp”中第一行的值(仅)。
打开App,查看更多内容
随时随地看视频慕课网APP