Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows EnableDelayedExpansion仅适用于第一个命令_Windows_Batch File_Cmd - Fatal编程技术网

Windows EnableDelayedExpansion仅适用于第一个命令

Windows EnableDelayedExpansion仅适用于第一个命令,windows,batch-file,cmd,Windows,Batch File,Cmd,在ApkTool执行之后!名称变量不再按预期扩展。我不知道这里发生了什么,也不知道如何修复它 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

在ApkTool执行之后!名称变量不再按预期扩展。我不知道这里发生了什么,也不知道如何修复它

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

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

但是,如果使用
call
启动第二个脚本,原始脚本将暂停,控制权仅临时交给第二个脚本。一旦第二个脚本完成,控件将返回到原始脚本,并从它停止的地方重新开始

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

谷歌建议
zipalign
apksigner
都是实际的可执行文件,所以你不需要调用它们。

我唯一能想到的是
apktool
是一个脚本,因为你没有使用
call
,在那之后,控制永远不会回到主脚本。如果
apktool
是一个常规的exe文件,我从来没有听说过这种情况,我甚至不明白这是怎么可能的。@SomethingDark,它是一个批处理文件。您的评论是正确的。如果只使用FOR变量本身,则不需要使用延迟扩展。不管怎样,这不是你的剧本的问题。谢谢,请将其作为答案发布。我从未尝试调用另一个启用延迟扩展的批处理,所以我不知道会发生这种情况。我同意Squashman,但这只是几个脚本中的一个,只是一个测试。