将 PowerShell 命令结果分配给批处理脚本中的变量
Posted
技术标签:
【中文标题】将 PowerShell 命令结果分配给批处理脚本中的变量【英文标题】:Assign PowerShell command result to variable within Batch-Script 【发布时间】:2022-01-04 15:29:40 【问题描述】:我想在批处理脚本中也能在 PowerShell CLI 中实现我可以做的事情:
PS C:\Users\andreas.luckert> $timestamp = Get-Date -UFormat "%d-%m-%Y--%R-UTC%Z" | ForEach-Object $_ -replace ":", "."
PS C:\Users\andreas.luckert> echo $timestamp
26-11-2021--15.55-UTC+01
现在,在我的批处理脚本中,我尝试了类似于以下的方法
SET _timestamp=('Get-Date -UFormat "%d-%m-%Y--%R-UTC%Z" | ForEach-Object $_ -replace ":", "." ')
但是,它不起作用。
像this 这样的解决方案在我看来有点老套,general instructions for batch variables 在这种情况下没有帮助,与我在一开始。 此外,它们都不包括时区,这对我来说很重要。
【问题讨论】:
捕获命令输出以分配给变量的语法可能很难看,但您的答案肯定在您链接到的最后一个问题中,您会发现更多具有相同语法的问题和答案. 下面@mklement0 的回答已经证明,有一种方法可以利用 PowerShell 命令,它允许使用完全相同的语法。 mklement0 在他的回答中使用的语法与您在原始问题中链接到的answer 中使用的语法相同。您基本上只有两个选项来捕获批处理文件中命令的输出。您要么使用FOR /F
命令,要么写入文件并使用SET /P
或另一个FOR /F
命令将其读回。
虽然其他问题中的一些替代答案确实可能有效,但我是 PowerShell 命令的新手,不知道如何根据我的特定需求调整所述答案。因此,我很感激 @mklement0 在他对我的问题的回答中构建了它。
【参考方案1】:
您需要调用 powershell.exe
,Windows PowerShell 的 CLI,以便从 批处理文件 执行 PowerShell 命令 - 请注意,这样的调用成本很高.
pwsh.exe
您需要通过批处理文件中的for /f
循环解析输出;运行 for /?
从 cmd.exe
会话(命令提示符)寻求帮助。
您需要加倍 %
批处理文件应该处理的字符逐字。
把它们放在一起:
@echo off
for /f "usebackq delims=" %%i in (`
powershell -c "(Get-Date -UFormat '%%d-%%m-%%Y--%%R-UTC%%Z') -replace ':', '.'"
`) do set _timestamp=%%i
echo %_timestamp%
注意:考虑将-noprofile
放在-c
之前,以抑制加载PowerShell 的profiles,以获得更好的性能和可预测的执行环境。
【讨论】:
以上是关于将 PowerShell 命令结果分配给批处理脚本中的变量的主要内容,如果未能解决你的问题,请参考以下文章
PowerShell 将命名参数传递给 ArgumentList
我正在使用来自 python 的 powershell 命令获取一些数据,而 Windows 中没有 cmd!如何将此输出分配给字符串变量?