在我的用例中,我有一个scriptMain.bat
调用scriptSub.bat
。
在调用的scriptSub.bat
中,需要启用DelayedExpansion
。
由于我必须与scriptMain.bat
和scriptSub.bat
共享变量设置(更新于2023年5月5日:我不想通过调用参数引用共享设置,因为scriptSub.bat
进行的设置数量太多),在调用scriptSub.bat
之前,必须在scriptMain.bat
中执行SETLOCAL ENABLEDELAYEDEXPANSION
命令。
所以我想检查scriptSub.bat
,如果DelayedExpansion
实际上是ON的。
我确实像这样实现了这些脚本--而且看起来很有效,但我想知道是否有更简单的解决方案可用。scriptMain.bat
:
@ECHO OFF
REM scriptMain.bat for both cases:
SETLOCAL ENABLEDELAYEDEXPANSION
CALL scriptSub.bat
ENDLOCAL
REM Now without ENABLEDELAYEDEXPANSION
SETLOCAL
CALL scriptSub.bat
ENDLOCAL
scriptSub.bat
:
REM scriptSub.bat:
SET "_var1=val1" & SET "_var2=!_var1!"
IF "%_var1%" == "%_var2%" (
ECHO Delayed expansion is ON
) ELSE (
ECHO Delayed expansion is OFF
)
GOTO:EOF
执行scriptMain.bat
的输出:
Delayed expansion is ON
Delayed expansion is OFF
2条答案
按热度按时间mqxuamgl1#
不如
fdbelqdn2#
也许你试图解决错误的问题。
您搜索延迟扩展模式的检测,但您应该解决这个问题,即调用的批处理文件可以返回值或变量,而无需调用者准备一些东西。
解决方案可能是返回
setlocal
范围外的变量的各种技术之一main.bat
child.bat
或用于更复杂的内容
child.bat