【问题标题】:Assign PowerShell command result to variable within Batch-Script将 PowerShell 命令结果分配给批处理脚本中的变量
【发布时间】: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 在他对我的问题的回答中构建了它。

标签: powershell batch-file timestamp batch-processing timestamp-with-timezone


【解决方案1】:
  • 您需要调用 powershell.exe,Windows PowerShell 的 CLI,以便从 批处理文件 执行 PowerShell 命令 - 请注意,这样的调用成本很高.

  • 您需要通过批处理文件中的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,以获得更好的性能和可预测的执行环境。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 2011-02-26
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多