在 Bash 环境中工作时,要将变量的值设置为命令的结果,我通常会这样做:
var=$(command -args)
其中var
是由命令command -args
设置的变量。然后,我可以将该变量作为$var
访问。
与几乎每个Unix shell兼容的更常规的方法是:
set var=`command -args`
那就是说,如何在 Windows批处理文件中使用命令的结果设置变量的值?我试过了:
set var=command -args
但是我发现var
设置为command -args
而不是命令的输出。
答案 0 :(得分:59)
要执行Jesse describes,您需要编写Windows批处理文件:
for /f "delims=" %%a in ('ver') do @set foobar=%%a
但是,如果您习惯使用Unix类型的脚本,我建议您在Windows系统上使用Cygwin。
答案 1 :(得分:33)
由于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批处理时,无法清除变量值可能会导致细微错误。
答案 2 :(得分:17)
当我在批处理文件中需要数据库查询结果时,我就是这样做的:
sqlplus -S schema/schema@db @query.sql> __query.tmp
set /p result=<__query.tmp
del __query.tmp
键在第2行:“set / p”通过“&lt;”将“result”的值设置为“__query.tmp”中第一行(仅)的值重定向运算符。
答案 3 :(得分:12)
我见过它的唯一方法就是你这样做:
for /f "delims=" %a in ('ver') do @set foobar=%a
ver
是Windows的版本命令,在我的系统上生成:
Microsoft Windows [Version 6.0.6001]
答案 4 :(得分:0)
Set "dateTime="
For /F %%A In ('powershell get-date -format "{yyyyMMdd_HHmm}"') Do Set "dateTime=%%A"
echo %dateTime%
pause
Official Microsoft docs用于for
命令
答案 5 :(得分:0)
有两种方法:
@echo off
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;;set "[[=>"#" 2>&1&set/p "&set "]]==<# & del /q # >nul 2>&1" &::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: --examples
::assigning chcp command output to %code-page% variable
chcp %[[%code-page%]]%
echo 1: %code-page%
::assigning whoami command output to %its-me% variable
whoami %[[%its-me%]]%
echo 2: %its-me%
::::::::::::::::::::::::::::::::::::::::::::::::::
;;set "{{=for /f "tokens=* delims=" %%# in ('" &::
;;set "--=') do @set "" &::
;;set "}}==%%#"" &::
::::::::::::::::::::::::::::::::::::::::::::::::::
:: --examples
::assigning ver output to %win-ver% variable
%{{% ver %--%win-ver%}}%
echo 3: %win-ver%
::assigning hostname output to %my-host% variable
%{{% hostname %--%my-host%}}%
echo 4: %my-host%