我正在处理一个在目录中重复出现的批处理文件,并调用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
)如果能帮上忙,我们将不胜感激。
发布于 2013-05-28 06:50:31
在我看来,您并没有很好地理解工作目录的概念。
您的批处理文件是从特定的工作目录执行的,然后从那里连续调用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-11-13 00:02:55
在最新版本的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
)
)https://stackoverflow.com/questions/16781445
复制相似问题