在 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 Server 2008 R2上开启Windows Power Shell ISE
在 Windows power shell 中,如何提取属性文件值并将其保存到 env var?
在 Windows 上创建定时任务的 Power Shell 脚本示例
powershell 更新power shell中的帮助系统。第二个文件在Windows中显示帮助文件。第三个文件显示来自在线来源的帮助。