Windows批处理文件错误
我制作了一个简单的Windows批处理文件来解码JAR和APK,它可以工作:Windows批处理文件错误,windows,batch-file,cmd,Windows,Batch File,Cmd,我制作了一个简单的Windows批处理文件来解码JAR和APK,它可以工作: @ECHO off SETLOCAL ENABLEDELAYEDEXPANSION SET listejar=:core.jar:core-junit.jar:bouncycastle.jar:ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:filterfw.jar:java.awt.jar:sv
@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
SET listejar=:core.jar:core-junit.jar:bouncycastle.jar:ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:filterfw.jar:java.awt.jar:svc.jar:am.jar:android.test.runner.jar:bmgr.jar:bu.jar:com.android.future.usb.accessory.jar:com.android.location.provider.jar:com.google.android.maps.jar:com.google.android.media.effects.jar:com.google.widevine.software.drm.jar:com.samsung.device.jar:com.yamaha.android.media.jar:twframework.jar:send_bug.jar:GlobalConfig.jar:ime.jar:input.jar:javax.obex.jar:libvtmanagerjar.jar:minimode.jar:monkey.jar:pm.jar:seccamera.jar:secframework.jar:sechardware.jar:secmediarecorder.jar:sec_feature.jar
SET baksmali=c:\DO\baksmali.jar
SET smali=c:\do\smali.jar
SET BTP1=c:\do
SET BTP2=c:\do\framework
FOR %%F IN ("*.odex") DO (
@echo.
@echo.
@echo.
ECHO Decompiling %%F
java -Xmx1024m -jar %baksmali% -a 15 -d %btp1% -d %btp2% -c %listejar% -x "%%F" -o "%%~nF"
ECHO Compiling %%~nF classses.dex
md "%%~dpnF"_o
java -Xmx1024m -jar %smali% -a 15 %%~nF -o "%%~dpnF"_o\classes.dex
RD /s/q "%%~dpnF"
C:\DO\7z.exe u "%%~dpnF".jar %%~dpnF"_o\classes.dex >NUL
RD /s/q %%~dpnF"_o
DEL %%~dpnxF
ECHO %%~nF is Deodexed
)
cd..
CD app
FOR %%F IN ("*.odex") DO (
@echo:
@echo:
@echo:
ECHO Decompiling %%F
java -Xmx1024m -jar %baksmali% -a 15 -d %btp1% -d %btp2% -c %listejar% -x "%%F" -o "%%~nF"
ECHO Compiling %%~nF classses.dex
md "%%~dpnF"_o
java -Xmx1024m -jar %smali% -a 15 %%~nF -o "%%~dpnF"_o\classes.dex
RD /s/q "%%~dpnF"
C:\DO\7z.exe u "%%~dpnF".apk %%~dpnF"_o\classes.dex >NUL
RD /s/q %%~dpnF"_o
DEL %%~dpnxF
ECHO %%~nF is Deodexed
)
echo ALL DONE press any key to exit
pause >NUL
exit
但后来我试着让它变得更好,我不知道我做错了什么。它现在马上退出。在这件事上给予帮助将不胜感激
这就是我在修订版中尝试做的:
@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
SET listejar=:core.jar:core-junit.jar:bouncycastle.jar:ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:filterfw.jar:java.awt.jar:svc.jar:am.jar:android.test.runner.jar:bmgr.jar:bu.jar:com.android.future.usb.accessory.jar:com.android.location.provider.jar:com.google.android.maps.jar:com.google.android.media.effects.jar:com.google.widevine.software.drm.jar:com.samsung.device.jar:com.yamaha.android.media.jar:twframework.jar:send_bug.jar:GlobalConfig.jar:ime.jar:input.jar:javax.obex.jar:libvtmanagerjar.jar:minimode.jar:monkey.jar:pm.jar:seccamera.jar:secframework.jar:sechardware.jar:secmediarecorder.jar:sec_feature.jar
SET baksmali=c:\DO\baksmali.jar
SET smali=c:\do\smali.jar
SET BTP1=c:\do
SET BTP2=c:\do\framework
CD framework
IF EXIST *.odex ( GOTO STARTFW ) ELSE ( ECHO Odex Not Found && GOTO FINISHEDFW )
:STARTFW
FOR %%F IN ("*.odex") DO (
@echo.
@echo.
@echo.
ECHO Decompiling %%~nxF
java -Xmx1024m -jar %baksmali% -a 15 -d %btp1% -d %btp2% -c %listejar% -x "%%F" -o "%%~nF"
ECHO Compiling %%~nF classses.dex
MD "%%~dpnF"_o
java -Xmx1024m -jar %smali% -a 15 %%~nF -o "%%~dpnF"_o\classes.dex
RD /s/q "%%~dpnF"
IF EXIST "%%~dpnF"_o\classes.dex (GOTO CONTINIUEFW) ELSE (GOTO CHECKFW)
:CHECKFFW
IF NOT EXIST C:\DO\Framework\ERORR ( MD C:\Framework\Error )
MOVE /Y "%%~dpnF".* C:\Framework\Error
ECHO Error With %%~nxF & %%~nF.jar
ECHO Moved To Error Folder
GOTO SKIPFW
:CONTINIUEFW
ECHO Injecting classes.dex to "%%~nF".jar
C:\DO\7z.exe u "%%~dpnF".jar %%~dpnF"_o\classes.dex >NUL
RD /s/q %%~dpnF"_o
DEL %%~dpnxF
ECHO %%~nF.jar is Deodexed
IF EXIST *.odex (
GOTO STARTFW
) ELSE (
ECHO Odex Not Found
GOTO FINISHEDFW
)
:SKIPFW
)
:FINISHEDFW
CD..
CD app
IF EXIST *.odex (
GOTO STARTAPP
) ELSE (
ECHO Odex Not Found
GOTO FINISHEDAPP
)
:STARTAPP
FOR %%F IN ("*.odex") DO (
@echo.
@echo.
@echo.
ECHO Decompiling %%~nxF
java -Xmx1024m -jar %baksmali% -a 15 -d %btp1% -d %btp2% -c %listejar% -x "%%F" -o "%%~nF"
ECHO Compiling %%~nF classses.dex
MD "%%~dpnF"_o
java -Xmx1024m -jar %smali% -a 15 %%~nF -o "%%~dpnF"_o\classes.dex
RD /s/q "%%~dpnF"
IF EXIST "%%~dpnF"_o\classes.dex ( GOTO CONTINIUEAPP ) ELSE ( GOTO CHECKAPP )
:CHECKFAPP
IF NOT EXIST C:\DO\app\ERORR ( MD C:\app\Error )
MOVE /Y "%%~dpnF".* C:\app\Error
ECHO Error With %%~nxF & %%~nF.apk
ECHO Moved To Error Folder
GOTO SKIPAPP
:CONTINIUEAPP
ECHO Injecting classes.dex to "%%~nF".apk
C:\DO\7z.exe u "%%~dpnF".apk %%~dpnF"_o\classes.dex >NUL
RD /s/q %%~dpnF"_o
DEL %%~dpnxF
ECHO %%~nF.apk is Deodexed
IF EXIST *.odex (
GOTO STARTAPP
) ELSE (
ECHO Odex Not Found
GOTO FINISHEDAPP
)
:SKIPAPP
)
echo ALL DONE press any key to exit
pause >NUL
exit
我还没有跟踪您的代码以了解为什么会出现语法错误。但是我看到了一个严重的问题——您试图在循环中使用GOTO,并在同一循环中分支到标签。这根本无法按您希望的方式工作。当你使用GOTO时,循环就被打破了。GOTO发现标签是OK的,但是脚本不再知道关于循环的任何信息。除非你真的很聪明并且想要混淆你的代码,否则你的结果肯定会与你的意图不同
一般来说,您不应该转到括号内代码块中的标签。对于for循环和IF语句都是如此。有关IF/ELSE块中的类似问题,请参阅。这里有很多脚本代码;如果只包含更改的位(之前和之后),可能会有所帮助。另外,您可以考虑用不同的<代码>回声< /COD>调用来调用脚本,以查看脚本在退出之前有多远。我发现这是调试CMD脚本的一种有用方法…在
cd framework
之后,当它位于IF EXIST*.odex(GOTO STARTFW)ELSE(ECHO odex Not found&&GOTO FINISHEDFW)
时,它在CMD:C:\DO\framework>IF EXIST*.odex(GOTO STARTFW)ELSE(ECHO odex Not found&&GOTO FINISHEDFW)中显示了这一点
)在这个时候是意外的。
C:\DO\framework>)
然后它就存在了在SKIPFW
之后有什么杂散的?为了节省跳跃,我会做如果不存在文件名转到下一个,那么其他的东西就不需要了,出错的地方也就更少了