EnableDelayedExpansion仅适用于第一个命令

时间:2018-10-15 19:04:40

标签: windows batch-file cmd

在ApkTool执行!name之后!变量不再按预期扩展。我不确定这是怎么回事,也不确定如何解决。

if not defined in_subprocess (cmd /k set in_subprocess=y ^& %0 %*) & exit
@echo off
setlocal ENABLEDELAYEDEXPANSION
cd /d "%~dp0"
for %%I in ("%~1") do (
set name="..\Compiled_apk\%%~nxI"
apktool b "%%~I" -f -o "!name!.apk"
zipalign -f 4 "!name!.apk" "!name!.temp"
del "!name!.apk"
ren "!name!.temp" "!name!.apk"
apksigner sign -v --key "..\Program_Files\testkey.pk8" --cert "..\Program_Files\testkey.x509.pem" "!name!.apk"
)
exit

1 个答案:

答案 0 :(得分:2)

在不使用call的情况下启动第二个批处理脚本时,原始脚本将停止并将控制权转移到第二个脚本。第二个脚本完成后,控制不会返回到原始脚本(因为它已停止)。

但是,如果您使用call启动第二个脚本,则原始脚本会暂停并且控制权只会暂时移交给第二个脚本。第二个脚本完成后,控制权将返回到原始脚本,并从上次停止的地方开始。

apktool b "%%~I" -f -o "!name!.apk"

Google建议zipalignapksigner是实际的可执行文件,因此您无需调用它们。