【问题标题】:Is it possible to set an environment variable to the output of a command in cmd.exe是否可以在 cmd.exe 中将环境变量设置为命令的输出
【发布时间】:2010-07-07 23:38:41
【问题描述】:

我需要做相当于

set ENVAR=`some-command`

在 windows/cmd.exe 脚本中。 Cygwin 不是一个选项。

对于加分:是否有一些 cmd.exe 相当于一般的反引号?

【问题讨论】:

  • 我有一个第三方程序,它使用脚本调用 cmd.exe 并在脚本完成后检查 CAUSE 环境变量。我不能直接使用另一个 shell。
  • 仅供参考,如何在 Linux 和 Unix 中执行此操作:unix.stackexchange.com/questions/493081/…

标签: shell cmd backticks


【解决方案1】:

一种快速而肮脏的方法是将其重定向到一个文件然后读取它,例如

some-command>out.txt
set /p ENVAR=<out.txt

我认为for 也可以帮助您,但我不记得确切的语法。尝试类似

for /f "usebackq" %x in (`some-command`) do set ENVAR=%x

我可能在选项中忘记了一些tokendelim...

【讨论】:

    【解决方案2】:

    不是“可能”,绝对必须指定“delims="(这意味着“无分隔符”),除非您希望变量最多只包含输入数据的第一个空格或制表符。

    建议将“delims=”指定为最后一个选项,以避免操作员和 shell 对选项感知的潜在混淆。

    FOR /F "usebackq delims=" %%a IN (`cygpath.exe -u "%~1"`) DO (
        SET CMDNAME=%%~a
        SHIFT
    )
    

    SS64 article on FOR /F

    【讨论】:

    • delims= 选项必须是最后一个选项,以防您想指定空格作为分隔符。字符串"delims= usebackq" 将不定义分隔符,但"usebackq delims= " 定义空格...
    • 没错。我想我的来源更多来自“最佳实践”阵营。我会适当地编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多