我正在处理一个在目录中重复的批处理文件,并调用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
)
帮助将不胜感激。
答案 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
)
)