Windows批处理替代Bash内联命令

11

有没有Windows等价的语法可以在bat脚本文件中运行另一个命令?

在Linux中,你可以简单地使用$(...)或``。


Windows的.bat文件是历史遗留问题,为什么不安装Perl呢? - cdarke
批处理文件仍然有其用处 - 例如,如果您必须在安装脚本的一部分中运行一个批处理文件。您不能假设用户系统上已安装Perl。 - the_mandrill
1个回答

10

是的,至少对于简单的事情而言可以这样做:

@setlocal enableextensions enabledelayedexpansion
@echo off
for /f %%w in ('echo xyzzy') do set var=%%w
echo Output is %var%
endlocal
那个脚本的输出结果是:
Output is xyzzy

使用echo命令生成的xyzzy参数。

在命令窗口中运行for /?可以获得更全面的选项列表。


我认为这是由 'for-in' 结构处理而不是 Windows 命令行引擎内部处理。在我的情况下似乎不起作用:http://stackoverflow.com/questions/11828801/imagmagick-how-to-add-a-gradient-splice-to-an-image-using-one-convert-command/11864792#11864792 - Mohsen
@Moshen,我认为for是唯一的方法。即使使用$()bash中也无法运行代码,它只是将另一个进程的标准输出替换掉而已。这与将其存储在环境变量中然后使用该变量没有什么不同,就像我的答案一样。 - paxdiablo
@Mohsen - FOR是一个内部命令,因此它肯定是由命令行引擎处理的。 - dbenham
FOR 出现在 MS-DOS v2.0 中 - 这里是 XP 文档 - SeanC
@paxdiablo:我目前周围没有Windows测试系统——但是你不需要添加"usebackq"参数,然后再使用反引号来包围“echo xyzzy”命令吗?for /f "usebackq delims= " %%w in (echo xyz) do set var=%%w - Kurt Pfeifle
@Kurt,不,真的没有必要。usebackq会改变每种引号的功能(执行命令、读取文件、使用纯文本等)。根据 for /? 的描述文本,带有反引号的 usebackq 与没有该选项的单引号相同。 - paxdiablo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接