如何在Batch-Script中将PowerShell命令执行结果赋值给变量
解决方案
批处理完整实现代码
将以下内容写入.bat/.cmd脚本即可实现需求:
@echo off :: 调用PowerShell生成带时区的格式化时间戳,赋值给批处理变量 for /f "delims=" %%a in (' powershell -NoProfile -Command "Get-Date -UFormat '%%d-%%m-%%Y--%%R-UTC%%Z' -replace ':', '.'" ') do set "_timestamp=%%a" :: 测试输出变量值,可根据实际需求删除该行 echo %_timestamp%
如果是直接在CMD命令行中单次执行,将%%替换为单个%即可:
for /f "delims=" %a in ('powershell -NoProfile -Command "Get-Date -UFormat '%d-%m-%Y--%R-UTC%Z' -replace ':', '.'"') do set "_timestamp=%a"
实现说明
- 批处理没有直接捕获命令行输出赋值给变量的原生语法,需要通过
for /f遍历命令输出完成赋值,参数delims=用于禁用默认分隔符,避免时间戳中存在空格、特殊符号时被截断 - 调用PowerShell时添加
-NoProfile参数可以跳过加载用户自定义配置,既提升执行速度,也避免环境配置对输出结果产生干扰 - 由于
%是批处理的变量标识符,传递给PowerShell的UFormat参数内的%需要转义为%%,否则会被批处理提前解析为无效变量,导致命令执行异常 - 原PowerShell逻辑可简化,无需额外调用
ForEach-Object,-replace操作可以直接作用于Get-Date的输出结果
内容的提问来源于stack exchange,提问作者Andreas L.
相关产品推荐
相关产品推荐

