gpt4 book ai didi

windows - 如何使用命令输出作为另一个命令的参数?

转载 作者:可可西里 更新时间:2023-11-01 11:18:11 25 4
gpt4 key购买 nike

这是对我的一个老问题的更新,因为我不是很清楚。
老实说,我什至没有 Win_CLI 经验来提出正确的问题。所以我很抱歉,我希望这次更好。

就像我在问题中所说的,我需要使用命令输出作为另一个命令的参数。

例如:-

CLITool -Switch (Value_OF_a_Command_OutPut)

我想我在这里需要的是 Set 命令:-

Set Value=
Command

CLITool -Switch %Value%

但是,问题是输出值将用 Line_Break 打印!

OutPut_Value
CLITool -Switch (Nothing!)

因此,命令将无法正确执行。

所以..我现在的问题是如何解决 Set 命令问题,
如果可能的话,如何用另一种技术做同样的事情?

BTW..正如大多数 Linux 用户所知,可以在其他命令的同一命令行中使用命令输出,如下所示:

CLITool -Switch $(Command)

我希望 Windows CLI 中是否有类似的东西。

请告诉我发布我的实际命令是否更好。


谢谢大家,
感谢您的帮助:)

最佳答案

您可以使用for/f 命令。对于执行命令输出中的每一行,将执行 do 子句中的代码,该行的内容存储在 for 可替换参数中

 for /f "delims=" %%a in ('command') do CLITool -Switch %%a

此外,您还可以执行命令,将输出发送到临时文件并使用输入重定向和 set/p 命令检索其内容

command > "tempfile"
<"tempFile" set /p "var="
CLITool -Switch %var%

在这两种情况下,假设 command 只会回显一行。如果它生成更多行,for 将为每一行执行 CLITool,而重定向选项只会从临时文件中检索第一行。

解决它的第三种方法是使用管道。管道左侧生成内容,右侧读取此内容。

command | ( set /p "var=" && @call CLITool -Switch %%var%% )

为什么要使用 call%%var%% 语法?我们在一行中设置一个变量,在同一行中我们需要检索该变量,为了使其工作,需要延迟扩展。但默认情况下,延迟扩展是禁用的,启用它不会解决任何问题,因为管道的每一侧都在其自己的 cmd 实例中执行,该实例在没有延迟扩展(默认行为)的情况下启动,因此,诀窍是转义对变量的引用(双百分号的原因)并在行中强制执行双重解析阶段(调用的原因)

替代方案可能是

command | cmd /e /v /q /c "set /p "var=" && CLITool -Switch !var!"

这样我们在 pipt 的右侧运行一个 cmd 实例,它启用了延迟扩展(/v),启用了扩展(/e),带有 echo off (/q) 将执行所需的命令。

但是管道代码(在这两种情况下)都有一个缺点:变量是在单独的 cmd 实例中设置的,因此,您的主批处理文件将无法访问它的值。

关于windows - 如何使用命令输出作为另一个命令的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27990009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com