批处理中for语句中的变量在执行外部程序后会自动变成空值呢?

批处理中for语句中的变量在执行外部程序后会自动变成空值呢?color20@echooff&setlocalenabledelayedexpansionfor/f"tok... 批处理中for语句中的变量在执行外部程序后会自动变成空值呢?

color 20
@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir /b') do (
if %%~xa==.apk (
rem 如果是apk文件才处理批处理中for语句中的变量在执行外部程序后会自动变成空值呢? rem fileName-src
set apkFileName=%%~nxa
set sourceFileName=!apkFileName:.apk=-src!
set unzipApkfilePath=!apkFileName:.apk=!
rem 使用APKTool反编译得到资源文件和smali格式源码
"E:\Android\Android Decompile\Ter-dex2jar.jd-gui\apktool\apktool.bat" d -f %~dp0!apkFileName! %~dp0!sourceFileName!
set apkFileName=%%~nxa
set sourceFileName=!apkFileName:.apk=-src!
set unzipApkfilePath=!apkFileName:.apk=!
echo !apkFileName!
echo !sourceFileName!
echo !unzipApkfilePath!
set
就是在这一步出错!!变量变成空值!!
完整代码-补充:因为代码不能卸载一次补充里
"C:\Program Files (x86)\WinRAR\WinRAR.exe" X %~dp0!apkFileName! %~dp0!unzipApkfilePath!\
rem 使用dex2jar得到Jar文件

"E:\Android\Android
Decompile\Ter-dex2jar.jd-gui\dex2jar-0.0.9.15\d2j-dex2jar.bat"
%~dp0!unzipApkfilePath!\classes.dex -o %~dp0!sourceFileName!\src.jar
)
)
展开
 我来答
yyykkkyyyy
2014-03-22 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3294万
展开全部
非常赞成 陌生时空 和 xxpinqz 两位网友的回答,补充一点:
"E:\Android\Android Decompile\Ter-dex2jar.jd-gui\apktool\apktool.bat" d -f %~dp0!apkFileName! %~dp0!sourceFileName!
此句 前面应该加个call 估计也是出现问题关键所在
此句看起来很长,其实就是 xx.bat 几个参数 的结构,批处理中调用另一批处理必须带call调用,否则返回不了,而调用windows很多窗口程序前面要带start调用也有类似道理,不过一个是等待被调用批处理结束后返回, 一个是不要等(除非start带/wait)start调用的结束就继续执行批处理后续命令
所以应该不是所说的那个位置变量值变成空了,而是另一批处理(包括它再调用的程序)出了问题而被误会,这个很容易检测,在此句之下加句检测命令 echo 返回否?&pause 甚至临时加上适当右括号使前面的括号匹配成对,写批处理要会自己检测错误,此句前设个检测点没问题,此句后检测就有问题了,当然就是这一句问题了。可以说,根据代码用途只要此句能返回,是不会出现所说的变量值变空的。
顺便提醒一下,此句调用的那个批处理是否利用了它自己的当前路径?不然此句前应改变一下当前路径比如
pushd "E:\Android\Android Decompile\Ter-dex2jar.jd-gui\apktool"
call apktool.bat d -f %~dp0!apkFileName! %~dp0!sourceFileName!
popd
百度网友2e74ee0
2014-03-22 · TA获得超过270个赞
知道小有建树答主
回答量:252
采纳率:100%
帮助的人:221万
展开全部
任何使用到%%a的语句都应该在for语句的两个括号内部。

其实调试代码的一个不错的方法就是不断地减少代码,直到不出错为止,那么你上一次删除的代码就是有问题代码。

试试这个:
color 20
@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir /b') do (
if %%~xa==.apk (
rem 如果是apk文件才处理批处理中for语句中的变量在执行外部程序后会自动变成空值呢? rem fileName-src
set apkFileName=%%~nxa
set sourceFileName=!apkFileName:.apk=-src!
set unzipApkfilePath=!apkFileName:.apk=!
rem 使用APKTool反编译得到资源文件和smali格式源码
"E:\Android\Android Decompile\Ter-dex2jar.jd-gui\apktool\apktool.bat" d -f %~dp0!apkFileName! %~dp0!sourceFileName!
set apkFileName=%%~nxa
set sourceFileName=!apkFileName:.apk=-src!
set unzipApkfilePath=!apkFileName:.apk=!
echo !apkFileName!
echo !sourceFileName!
echo !unzipApkfilePath!
))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xxpinqz
2014-03-21 · TA获得超过1322个赞
知道小有建树答主
回答量:1055
采纳率:0%
帮助的人:1311万
展开全部
把代码发全了。。。。
或者试着把:
set sourceFileName=!apkFileName:.apk=-src!
set unzipApkfilePath=!apkFileName:.apk=!
改为:
set "sourceFileName=%%~na-src"
set "unzipApkfilePath=%%~na"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式