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]
资源