【问题标题】:windows subcommand evaluationwindows子命令评估
【发布时间】:2011-03-25 10:17:27
【问题描述】:

linux & unix shell 可以处理这样的子命令。

$> command `subcommand`

windows cmd shell 有类似的功能吗?

【问题讨论】:

    标签: windows shell command-line cmd


    【解决方案1】:

    您可以使用for 命令的变体获得类似的结果:

    FOR /F "usebackq tokens=*" %%a IN (`subcommand`) DO @command %%a
    

    一个很大的区别(除了不直观和丑陋之外)是它会为subcommand产生的每一行执行一次command

    请注意,在脚本文件中,百分号必须加倍(如果您出于某种原因想要在命令行中这样做,请使用非加倍的百分号)。

    【讨论】:

    • usebackq 不是必需的(您可以使用单引号):for /f "tokens=*" %f in ('subcommand') do @(command "%f")(我喜欢在 'batch' 中使用带条件语句的括号,这样您就可以轻松地将多个语句添加到“身体”)
    【解决方案2】:

    总的来说,没有。 Windows 命令提示符实际上并不是一个 shell,因为它不提供很多自己的功能,独立于您可以运行的命令。例如,在大多数 Un*x shell 中,文件通配(将foo.* 与文件列表匹配)由 shell 本身处理。在 Windows 中,每个应用程序都可以从命令行看到foo.*,并且必须自己实现文件通配。

    如果您正在尝试自动化 Windows,或者想要一个功能更全面的 shell,您应该考虑使用 PowerShell,它可以让您执行子命令:

    命令(子命令)

    【讨论】:

    • PowerShell 还有很多其他缺失的功能,其中一些 cmd.exe 确实支持。比如&&, ||,
    • 关于 PowerShell(对我而言)最棘手的事情之一是新语法……它与 DOS shell、bash/tcsh 或 perl 完全不同。特别是对您而言,PowerShell 具有“-and”和“-or”而不是“&&”或“||”,并且实际上可以很好地处理重定向。有关所有详细信息,请参阅“help about_logical_operator”或“help about_redirection”。
    • 感谢您的评论。我将不得不研究“-and”和“-or”。当我上次使用它时,我已尽我所能进行搜索,所有消息来源似乎都说它还不被支持(但在列表中)。也许他们“最近”实施了这些?无论如何,使用看起来像命令选项而不是特殊字符的东西是迟钝的......至于重定向,恕我直言,我认为使用对象而不是文本是不必要的复杂。它可能会使某些流程接口更高效,但代价是维护额外的接口。复杂性是不必要的。
    猜你喜欢
    • 2021-06-07
    • 2010-09-24
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多