在 Windows power shell 中,如何提取属性文件值并将其保存到 env var?

Posted

技术标签:

【中文标题】在 Windows power shell 中,如何提取属性文件值并将其保存到 env var?【英文标题】:In Windows power shell, how do you extract a properties file value and save it to an env var? 【发布时间】:2021-03-28 15:07:53 【问题描述】:

我有一个属性文件,其中包含如下条目...

...
USERNAME=myuser
...

在我的 Makefile 中,我有以下使用类 Unix 的命令来获取变量的值...

export USERNAME=$(shell grep USERNAME my_properties.txt | cut -d'=' -f 2-)

但是,在 Windows 电源 shell 中(也许命令提示符是正确的短语?),上述方法不起作用,因为“grep”不是标准命令(以及其他命令)。在 Windows power shell 环境中从属性文件中提取属性的等效方法是什么?

【问题讨论】:

感谢采纳;原来-ExecutionPolicy Bypass 是不必要的,但-NoProfile 是可取的 - 请参阅我的更新。 【参考方案1】:

我们可以按照以下步骤在 PowerShell 中实现这一点

    读取文件内容 将内容转换为键值对 创建具有所需值的环境变量

您可以根据需要合并这些步骤,我将它们分开以便更好地理解

这是脚本

$content = Get-Content .\user.properties -raw
$hashTable = ConvertFrom-StringData -StringData $content
$Env:USERNAME = $hashTable.USERNAME

【讨论】:

@mklement0 使用“select-string”和“split”的答案提供了与“grep”和“cut”命令更接近的等效项【参考方案2】:

假设cmd.exe 是默认shell:

export USERNAME=$(shell powershell -noprofile -c "(Select-String 'USERNAME=(.+)' my_properties.txt).Matches.Group[1]")

注意:-NoProfile 禁止加载 PowerShell 的配置文件,不幸的是默认情况下会发生这种情况。如果您需要-File 参数来执行脚本文件,您可能还需要-ExecutionPolicy Bypass,除非您的有效execution policy 允许脚本执行。

上面使用 PowerShell CLI 的 -c (-Command) 参数来传递使用 Select-String cmdlet 的命令,PowerShell 的 grep 模拟。


更接近您的命令的模拟如下,它另外使用-split、string-splitting operator(仅显示原始 PowerShell 命令;将其放在上面的"..." 中):

((Select-String USERNAME my_properties.txt) -split '=', 2)[-1]

【讨论】:

以上是关于在 Windows power shell 中,如何提取属性文件值并将其保存到 env var?的主要内容,如果未能解决你的问题,请参考以下文章

text Power Shell:在Windows 10上解压缩

Windows Power Shell

如何在Windows Server 2008 R2上开启Windows Power Shell ISE

在 Windows power shell 中,如何提取属性文件值并将其保存到 env var?

在 Windows 上创建定时任务的 Power Shell 脚本示例

powershell 更新power shell中的帮助系统。第二个文件在Windows中显示帮助文件。第三个文件显示来自在线来源的帮助。