这里有两种方法:
@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%
脚本的输出:
1: Active code page: 65001
2: mypc\user
3: Microsoft Windows [Version 10.0.19042.1110]
4: mypc
说明:
1] 以 &::
结尾的部分是行末注释,可以忽略。我只是为了宏包含而放置了它们。
2] 行首的 ;;
将被忽略,因为 ;
是批处理脚本的标准分隔符。它被放在那里是为了提醒注释,并进一步增强宏定义的位置。
3] 使用的技术称为“宏”,它将命令分配给变量,当调用该变量时,执行该命令。
4] 第一个定义的宏包含两个部分:
set "[[=>"#" 2>&1&set/p "
并且
set "]]==<# & del /q # >nul 2>&1"
通过&
分隔,可以在一行上定义它们。第一个将命令的输出重定向到文件#
中,并添加set/p
以开始使用set /p
technique 读取文件。第二个宏使用<#
完成set /p
读取,然后删除文件。两个宏之间的文本是变量的名称。类似于set /p myVariable=<#
5] 第二个宏包含三个部分,扩展后只是一个for /f
循环。可能有更优雅的方法来实现。
for /f "delims=" %a in ('ver') do @set foobar=%a
。在脚本文件中使用for /f "delims=" %%a in ('ver') do @set foobar=%%a
。 - georgbash
。然后您就可以编写 bash 命令。您还可以执行 bash 脚本。 - Nathan