首页 > 解决方案 > Windows 批处理脚本中 $() 的替换

问题描述

我正在尝试将我的 bash 脚本转换为 Windows 批处理文件。这是一个非常简单的单行程序,应该将文件的内容作为参数提供给script.exe,并将结果发送到output.txt.

这是有效的 bash 脚本:

./script.exe $(cat input.txt) > output.txt

我知道这可能是不好的风格,但它有效。问题是,我不知道如何$()在 Windows 批处理文件中执行类似操作。当我使用它时,它将字符串"$(cat input.txt)"作为参数发送,而不是运行命令。

标签: bashbatch-file

解决方案


这种 bash 结构称为命令替换。这是@MichaelBurr 的一个很好的答案。

for /f您可以使用带有以下命令的 cmd.exe 脚本获得类似的功能 :

for /f "usebackq tokens=*" %%a in (`echo Test`) do my_command %%a

是的,这有点不明显(至少可以说),但它就是存在的。

for /?血淋淋的细节。

旁注:我认为echo在“”命令的反引号内使用“”for /f需要使用“ cmd.exe /c echo Test”来完成,因为echo它是 的内部命令cmd.exe,但它以更自然的方式工作。Windows 批处理脚本总是以某种方式让我感到惊讶(但通常不是很好)。

另请参阅超级用户:Windows CLI 中是否有类似命令替换的内容?


推荐阅读