首页 文章

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

提问于
浏览
90

Bash 环境中工作时,要将变量的值设置为命令的结果,我通常会这样做:

var=$(command -args)

其中 var 是由命令 command -args 设置的变量 . 然后我可以将该变量作为 $var 访问 .

执行此操作的更常规方法几乎与每个Unix shell兼容:

set var=`command -args`

也就是说,如何在 Windows batch file 中使用命令的结果设置变量的值?我试过了:

set var=command -args

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

4 回答

  • 59

    要从Windows批处理文件中执行Jesse describes,您需要编写:

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

    但是,如果您习惯使用Unix类型的脚本,我建议您在Windows系统上使用Cygwin .

  • 11

    需要注意一点,因为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批处理时未能清除变量的值可能是导致细微错误的原因 .

  • 33

    当我在批处理文件中需要数据库查询结果时,我就是这样做的:

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

    键位于第2行:“set / p”通过“<”重定向运算符将“result”的值设置为“__query.tmp”中第一行(仅)的值 .

  • 17

    我见过它的唯一方法就是你这样做:

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

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

    Microsoft Windows [Version 6.0.6001]
    

    Source

相关问题