批处理脚本中PowerShell解码Base64字符串无返回值,求解决
批处理中通过PowerShell解码Base64并存储变量的问题解决
你的解码脚本有两个核心问题,导致无法拿到正确结果:
1. 变量定义的空格陷阱
批处理对空格非常敏感,Set string = "dAB1AHMAdAA=" 这种写法会创建**名为string (末尾带空格)**的变量,而不是你想要的string。之后你引用%string%时,实际是在调用一个未定义的变量,值是空的。
正确的变量定义方式是用引号包裹整个赋值语句,彻底避免空格干扰:
Set "string=dAB1AHMAdAA="
2. PowerShell语句没正确调用批处理变量
你原来的PowerShell解码代码里,"""string""" 是把字符串"string"传给了解码方法,而不是批处理变量string的值。必须把批处理变量%string%正确传递给PowerShell,同时处理好引号转义。
修正后的完整解码脚本
@echo off Set "string=dAB1AHMAdAA=" for /f "tokens=* delims=" %%i in ('powershell [Text.Encoding]::Utf8.GetString([Convert]::FromBase64String('"%string%"'))') do set "decoded=%%i" echo %decoded%
关键调整说明
- 用
'%string%'将批处理变量传递给PowerShell:外层单引号是for /f的命令分隔符,内层双引号确保变量值里有特殊字符时也能正确传递。 - 去掉了冗余的转义符
^和三重引号,简化语句的同时保证逻辑正确。
顺带提一句,你的编码脚本也存在同样的变量定义空格问题,修正后的编码脚本如下,这样编码和解码逻辑就能完全对应:
@echo off Set "string=test" for /f "tokens=* delims=" %%i in ('powershell [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('"%string%"'))') do set "encoded=%%i" echo %encoded%
内容的提问来源于stack exchange,提问作者mathan kumar c
相关产品推荐
相关产品推荐

