Windowsbatch file:如何用命令的结果设置variables?

在一个bash环境下,我通常会这样做:

var=$(command -args) 

而我使用$var并将其值设置为命令的结果。 同样的更传统

 set var=`command -args` 

几乎每个unix shell都兼容。

我怎么能定义一个Windows bat文件中的variables呢? 我试过了

 set var=command -args 

但我只得到“command -args”string。

为了完成Jesse从batch file中描述的内容,您需要编写

 for /f "delims=" %%a in ('ver') do @set foobar=%%a 

但是,如果您习惯于使用unixtypes的脚本,我会build议在您的Windows系统上使用Cygwin 。

一个需要小心,因为Windows批处理命令:

 for /f "delims=" %%a in ('command') do @set theValue=%%a 

与Unix shell语句没有相同的语义:

 theValue=`command` 

考虑命令失败的情况,导致错误。

在Unix shell版本中,对“theValue”的赋值仍然发生,任何以前的值都被replace为一个空值。

在Windows批处理版本中,它是处理错误的“for”命令,并且“do”子句永远不会到达,所以之前的值“theValue”将被保留。

要在Windows批处理脚本中获得更多类Unix语义,必须确保分配发生:

 set theValue= for /f "delims=" %%a in ('command') do @set theValue=%%a 

将Unix脚本转换为Windows批处理时未能清除variables的值可能是微妙的错误的原因。

当我在我的batch file中需要数据库查询的结果时,我这样做:

 sqlplus -S schema/schema@db @query.sql> __query.tmp set /p result=<__query.tmp del __query.tmp 

关键在第2行:“set / p”通过“<”redirect操作符将“result”的值设置为“__query.tmp”中第一行的值(仅)。

我看到它完成的唯一方法是如果你这样做:

 for /f "delims=" %a in ('ver') do @set foobar=%a 

ver是Windows的版本命令,在我的系统上产生:

 Microsoft Windows [Version 6.0.6001] 

资源