【问题标题】:How to pass the contents of a file as a parameter on the command line?如何在命令行上将文件的内容作为参数传递?
【发布时间】:2019-01-27 15:27:19
【问题描述】:

假设我想跑步

>foo bar

但是bar 会根据我在文件系统中的位置而改变。我想要做的,所以我不必记住bar 的正确值,是在各自的文件夹中保留一个文件fizz,这样我就可以做一些类似调用的事情

>foo fizz

这当然不是开箱即用的。 也没有

>foo < fizz

因为foo 不需要输入,只是一个参数。我找到了一个solution for Linux,但在 Windows 上没有。

【问题讨论】:

  • 顺便说一句:我们建议使用 PowerShell 而不是 cmd.exe shell 脚本(批处理)。

标签: windows batch-file command-line-arguments


【解决方案1】:

假设fizz 包含没有空格的单行,即单行

for /F %i in (fizz) do @foo %i

会做你想做的事。如果您放入 fizz 的参数可能包含空格,请使用

 for /F "delims=" %i in (fizz) do @foo "%i"

将论点一次性传递。如果将其放入批处理文件,则将 % 字符加倍。

【讨论】:

    【解决方案2】:

    Anton 准确地给出了你想要的,并且应该被标记为正确答案。但是,我可以补充一下(根据我之前的经验,尤其是在 java 版本中),foo 可能有不同的版本,类似于 bar 可能会有所不同,具体取决于您在文件系统中运行它的位置。所以fizz 将同时具有可执行文件和参数。即

    路径1中fizz的内容:

    foo bar
    

    路径 2 中的 fizz 内容:

    foo1 bar2
    

    然后只调用文件的内容,而不指定命令(因为它已经存在于文件fizz 中)。

    for /f "delims=" %i in (fizz) do %i
    

    此方法还可以在fizz 中存在的下一行中运行更多命令,例如如果fizz 包含:

    ping localhost
    ping 127.0.0.1
    nslookup hostname1
    

    每个都将按照上面的 for 循环顺序运行。

    PS!如果您需要从批处理文件运行它,请提醒将% 加倍到%%

    【讨论】:

    • 如果我正确理解了您的前两个示例,我不妨编写一个包含命令和参数的特定于文件夹的批处理文件。在阅读第一个答案时,我想到这实际上是我的特定应用程序的更好解决方案。
    • @Raketenolli 几乎就像每个批处理文件一样,但不完全是,我将添加一些解释为什么它不一样。 :) 是的,就像我说的那样,第一个应该被标记为正确,因为这完全符合您的要求,我不希望您将我的标记为正确。感谢您的支持,我很感激。
    猜你喜欢
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2012-12-21
    相关资源
    最近更新 更多