我正在循环读取一个文件的参数(input.txt),它有一个编码的字符串值,该编码值将使用 Powershell 命令解码,但是感叹号“!”符号在解码后被排除。
@echo off
setlocal EnableDelayedExpansion
set input_file=%cd%\input.txt
for /f "token=1-2" %%a in (%input_file%) do (
set param1=%%a
set param2=%%b
for /f "tokens=* delims=" %%i in ('powershell "[Text.Encoding]::utf8.GetString([Convert]::FromBase64String('!param2!'))"') do set "decoded=%%i"
echo !decoded!
)
exit /b
:EOF
Param2
值是 TWF0dCQhMyM=
它的解码值应该是 Matt$!3#"
但是它正在返回 Matt$3#"
为什么不包括感叹号“!”符号,解决方案是什么?请指教
注意:在这里,当我得到这样的变量值时 %variable_name% 它没有工作,只有当我使用 !variable_name!它正在工作
在使用
%%i
之前,您需要禁用延迟扩展。
@echo off
setlocal EnableDelayedExpansion
set "FromBase64=powershell "[Text.Encoding]::utf8.GetString([Convert]::FromBase64String"
set "input_file=%cd%\input.txt"
for /f "tokens=1-2" %%a in (%input_file%) do (
set param1=%%a
set param2=%%b
for /f "tokens=* delims=" %%i in ('%FromBase64%('!param2!'))"') do (
setlocal DisableDelayedExpansion
echo(%%i
endlocal
)
)
exit /b
或者完全禁用延迟扩展并避免使用 param2 变量
@echo off
setlocal DisableDelayedExpansion
set "FromBase64=powershell "[Text.Encoding]::utf8.GetString([Convert]::FromBase64String"
set "input_file=%cd%\input.txt"
for /f "token=1-2" %%a in (%input_file%) do (
set param1=%%a
for /f "tokens=* delims=" %%i in ('%FromBase64%('%%b'))"') do (
echo(%%i
)
)
exit /b