0

我正在处理一个在目录中递归的批处理文件,并调用 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
)

帮助将不胜感激。

4

2 回答 2

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
    )
)
于 2013-05-27T22:50:30.817 回答
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
    )
)
于 2013-11-12T16:02:55.487 回答