我有一个子程序,它使用参数来返回一个字符串。作为我的日志记录的一部分,我想在退出例程之前显示返回的参数值。
更容易在代码中解释!
@ECHO OFF
SET MYVAL=1
ECHO Before MYVAL=%MYVAL%
CALL :SETMYVAL MYVAL
ECHO After MYVAL=%MYVAL%
PAUSE
EXIT /b 0
:SETMYVAL
SET "%~1=2"
ECHO SETMYVAL called, returning %~1=%~1
GOTO :EOF
上面的代码产生:
Before MYVAL=1
SETMYVAL called, returning MYVAL=MYVAL
MYVAL=2
Press any key to continue . . .
但我希望子程序的最后一行输出
SETMYVAL called, returning MYVAL=2
任何想法(不移动线路,或使用扩展或延迟扩展)
答案 0 :(得分:1)
ECHO SETMYVAL called, returning %~1=2
这应该做到....
或者
ECHO SETMYVAL called, returning %~1=%MYVAL%
或
call ECHO SETMYVAL called, returning %~1=%%%~1%%
答案 1 :(得分:1)
你的案子是人为的,所以你可能无法获得现实生活中的解决方案。
@ECHO OFF
SET MYVAL=1
ECHO Before MYVAL=%MYVAL%
CALL :SETMYVAL MYVAL
ECHO After MYVAL=%MYVAL%
PAUSE
EXIT /b 0
:SETMYVAL
SET "val=2" & call SET "%~1=%%val%%"
ECHO SETMYVAL called, returning %~1=%val%
GOTO :EOF
答案 2 :(得分:0)
感谢foxidrive,我能想到的最好的是:
:SETMYVAL
SET "%~1=2"
ECHO ECHO %%%~1%%>"%TEMP%\SETMYVAL.bat"
FOR /F "tokens=*" %%A IN ('CALL "%TEMP%\SETMYVAL.bat"') DO (CALL :SETMYVALFROMFILE %%A)
ECHO SETMYVAL called, returning %~1=%MYTEMP%
GOTO :EOF
:SETMYVALFROMFILE
SET MYTEMP=%~1
GOTO :EOF
令人讨厌的呃?