我有一个批处理脚本,我正在尝试对字符串进行编码。我已经在Xor a string in a bat file
的帮助下成功编码了字符串但是现在我想存储值%show%!val!在变量中,以便可以在脚本中的任何位置使用它。下面是我的代码。任何建议将不胜感激。
@echo off
setlocal enableDelayedExpansion
call :init
:: Curly braces are used to denote text that should be encrypted.
:: Encryption can span multiple lines
:: {
:::password
:: }
:: Here I use a FOR loop to show all encrypted lines within this script
:: that begin with :::
for /f "delims=: tokens=*" %%A in ('findstr /b ":::" "%~f0"') do (
set val=%%A
set pwd = %show% !val!
)
echo %pwd%
exit /b
:show Str
::{
:: Nccyvrf gur fvzcyr "ebgngr nycunorg 13 cynprf" pvcure gb fgevat Fge
:: naq jevgrf gur erfhyg gb fgqbhg. Pbafrphgvir dhbgrf ("") ner pbairegrq
:: vagb n fvatyr dhbgr (").
::}
setlocal disableDelayedExpansion
set "str=%~1"
setlocal enableDelayedExpansion
set "str=!str:""="!^"
if defined {boshfpngrq} (
set "len=0"
set "str2=.!str!"
for /L %%A in (12,-1,0) do (
set /a "len|=1<<%%A"
for %%B in (!len!) do if "!str2:~%%B,1!"=="" set /a "len&=~1<<%%A"
)
set /a len-=1
set rtn=
for /l %%n in (0,1,!len!) do (
set "c=!str:~%%n,1!"
if defined {hccre}!c! for /f %%c in ("!c!") do (
if "!{hccre}:%%c=%%c!" equ "!{hccre}!" (
set "c=!{hccre}%%c!"
) else (
set "c=!{ybjre}%%c!"
)
)
set "rtn=!rtn!!c!"
)
) else set "rtn=!str!"
echo(!rtn!
exit /b 0
:init
set "}="
set "{="}
set "{hccre}=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "{ybjre}=abcdefghijklmnopqrstuvwxyz"
for /l %%A in (0 1 25) do (
set /a "B=(%%A+13)%%26"
for /f %%B in ("!B!") do (
set "{hccre}!{hccre}:~%%A,1!=!{hccre}:~%%B,1!"
set "{ybjre}!{ybjre}:~%%A,1!=!{ybjre}:~%%B,1!"
)
)
set "{boshfpngrq}="
set "{boshfpngvbaGrfg}={N}"
if "!{boshfpngvbaGrfg}:A=!" equ "!{boshfpngvbaGrfg}!" set {boshfpngrq}=1
set "show=call :show"
exit /b
答案 0 :(得分:0)
一种用于完成类似返回值(CMD实际上没有它们)的方法是将变量 name 传递给函数,并为其赋值(在setlocal之外)。
CALL :MYFUNC RETVAL 5 7 11
@ECHO Return Value: %RETVAL%
EXIT /B
:MYFUNC
SETLOCAL
SET DESTVAR=%~1
REM Do some other stuff.
SET /A TEMPVAR=%2 * %3 * %4
REM Now for the magic...
EXIT /B && SET "%DESTVAR%=%TEMPVAR%"
关键行是EXIT /B
(或者您可以先使用ENDLOCAL
,然后再使用EXIT /B
)与赋值的组合,在赋值之前执行替换(不延迟扩展)。