首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量反编译不留在原目录中的.Class文件

批量反编译不留在原目录中的.Class文件
EN

Stack Overflow用户
提问于 2013-05-28 06:44:30
回答 2查看 2.1K关注 0票数 0

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

由于这样或那样的原因,文件被反编译,但它们不会保留在原始位置,而是.jad文件位于我调用bat文件的位置。

我的BAT文件代码如下:

代码语言:javascript
复制
SETLOCAL EnableDelayedExpansion

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

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

如果能帮上忙,我们将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-28 06:50:31

在我看来,您并没有很好地理解工作目录的概念。

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

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

下面这样的代码应该可以做到:

代码语言:javascript
复制
move *.java "%%G/"

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

更新

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-11-13 00:02:55

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

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

代码语言:javascript
复制
@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
    )
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16781445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档