批量文件到批量反编译。提取的Jar中的类文件不在原始目录中

时间:2013-05-27 22:44:30

标签: java batch-file

我正在处理一个在目录中重复的批处理文件,并调用Java Decompiler来反编译.class文件。

出于某种原因,文件被反编译但是它们不会保留在原始位置,而是.jad文件位于我从其调用我的bat文件的位置。

我的BAT文件代码如下:

SETLOCAL EnableDelayedExpansion

FOR /D /r %%G in ("*") do (
@echo decompiling
jad -o "%%G/*.class"
@echo decompiled

@echo renaming
ren *.jad *.java
@echo renamed
)

帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

在我看来,你完全不理解工作目录的概念。

您的批处理文件是从特定的工作目录执行的,而不是从那里连续调用JAD。

您需要将批处理文件更改为CD(更改目录),或将生成的反编译文件移动到.class所在的位置。

这样的事情应该这样做:

move *.java "%%G/"

试一试。此外,如果您计划在项目中使用源代码,则应考虑将.class文件移动到其他位置。

更新

因此,用于反编译和保留原始包结构的整个脚本应该如下所示。我还冒昧地添加一个选项来删除.class文件以进行清理。

SETLOCAL EnableDelayedExpansion

FOR /D /r %%G in ("*") do (
@echo decompiling
jad -o "%%G/*.class"
@echo decompiled

@echo renaming
ren *.jad *.java
@echo renamed

@echo moving...
move *.java "%%G/"
@echo moved...
)

SET /P RESULT=[Delete .class files (y/n)]
IF %RESULT% == yes do (
    FOR /D /r %%G in ("*") do (
    cd "%%G/"
    del *.class
    )
)

答案 1 :(得分:0)

在最新版本的Jad(1.5.8g)中,使用通配符时,不会使用某些字符(如美元符号)拾取文件名。我已经修改了脚本以单独反编译文件以解决Jad中的这个限制。

我还修改了它以使用-d选项指定输出文件夹。这消除了执行移动操作的需要。

@echo off

SETLOCAL EnableDelayedExpansion

FOR /D /r %%G in ("*") do (
    FOR %%X in ("%%G\*.class") do (
        jad -o -d "%%G" "%%X"
        ren "%%~dpnX.jad" "%%~nX.java"
    )
)

SET /P RESULT=[Delete .class files (y/n)]
IF %RESULT% == yes do (
    FOR /D /r %%G in ("*") do (
    cd "%%G\"
    del *.class
    )
)