如何用PowerShell批量执行Java反编译命令并指定输出路径?
批量反编译Project Zomboid的.class文件
需求
我想用以下命令批量反编译嵌套文件夹内的数百个.class文件:
java -cp "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.4\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -hdc=0 -dgs=1 -rsy=1 -rbr=1 -lit=1 -nls=1 -mpm=60 (source) (dest)
已完成操作
我已经能通过以下命令定位所有目标.class文件:
dir -Path "C:\Program Files (x86)\Steam\steamapps\common\ProjectZomboid" -Recurse -Include *.class
尝试通过管道结合ForEach-Object实现批量处理,但因未指定输出路径报错:
dir -Path "C:\Program Files (x86)\Steam\steamapps\common\ProjectZomboid" -Recurse -Include *.class | ForEach-Object -Process {java -cp "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.4\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -hdc=0 -dgs=1 -rsy=1 -rbr=1 -lit=1 -nls=1 -mpm=60 "$_"}
核心难点
源文件的获取已经解决,但不知道如何配置输出路径:需要将C:\Program Files (x86)\Steam\steamapps\common\ProjectZomboid\zombie\SandboxOptions.class这类路径转换为.\zombie\——也就是把前缀C:\Program Files (x86)\Steam\steamapps\common\ProjectZomboid替换为.,同时去掉文件名。
最终可用命令
感谢帮助,我已经写出了可正常运行的完整命令(可能存在更优写法,但功能正常):
dir -Path "C:\Program Files (x86)\Steam\steamapps\common\ProjectZomboid" -Recurse -Include *.class | ForEach-Object -Process {java -cp "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.4\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -hdc=0 -dgs=1 -rsy=1 -rbr=1 -lit=1 -nls=1 -mpm=60 $_ ($_.PSParentPath.ToString().Replace('Microsoft.PowerShell.Core\FileSystem::C:\Program Files (x86)\Steam\steamapps\common\ProjectZomboid', '.') + '\')}
内容的提问来源于stack exchange,提问作者Modin
相关产品推荐
相关产品推荐

