0

我听说在我之前的问题的评论中不能将 java 代码添加到批处理文件中:

但是有没有其他选择呢?
是否可以将java代码添加到批处理文件中?

我在批处理文件中尝试了以下操作,但它不起作用:

vol231.exe -f m.walkin(new File(d.detectDrive())) imageinfo > Volatility.txt

这是我创建的用于在 java 命令提示符下运行的 cmdenv.bat:

E:
echo off
cls

... //This part is a long part for reducing footprint whereby the command prompt is switched to Helix

vol231.exe -f E:\KOHMOHOJOJO-PC-20140714-152414.raw imageinfo > Volatility.txt
vol231.exe -f E:\KOHMOHOJOJO-PC-20140714-152414.raw --profile=Win7SP0x86 pslist >> Volatility.txt
pause
exit

这允许我的波动性命令在封闭的命令提示符 (Helix) 中运行,从而减少占用空间。

但是,波动率命令都是硬编码的。和E:\KOHMOHOJOJO-PC-20140714-152414.raw变化--profile=Win7SP0x86。由于批处理文件确实允许 java 编码,有什么替代方法吗?

我是 java 和批处理文件的新手。

编辑1: 在此处输入图像描述 在此处输入图像描述

我尝试更改 java_path 但它仍然有错误。

Edit2:我尝试了不同的路径,例如:

  1. C:\Program Files\Java\jdk1.8.0_05\binC:\Program Files\Java\jre8\bin 我明白了Error: Could not find or load main class TestRun1

  2. C:\Users\User\workspace\Volatility\bin并且C:\Users\User\workspace\Volatility\src(这是保存类的工作区)我得到C:\Users\User\workspace\Volatility\(bin or src)\java的不是内部或外部命令、可运行程序或批处理文件。所以我将 java.exe 添加到文件中。错误又回到Error: Could not find or load main class TestRun1.

这个批处理文件似乎无法读取java ..我尝试.在前面添加一个TestRun1但它仍然有同样的错误。我还发现我在Control Panel\System and Security\System\Advance System Settings\Environment Variables(路径)下有环境变量。我尝试删除C:\Program Files\Java\jdk1.8.0_05\bin然后运行它,但它仍然有同样的错误。

4

3 回答 3

0

让您的 Java 程序将文件名作为命令行选项传递给批处理文件。在批处理文件中,您可以将其作为变量访问%1。您可以传递多个命令行选项;其他的将以 、 等形式%2提供%3

于 2014-07-15T07:19:05.873 回答
0

那么可以将java代码添加到批处理文件中吗?

,您不能将 Java 代码添加到批处理文件中。

替代解决方法:

要在批处理文件中使用 Java 值,请在 Java 中打印该值,在批处理文件中使用该值。

在 Java 中,

public class TestRun1
{
    public static void main(String args[])
    {
       System.out.println(m.walkin(new File(d.detectDrive())));
    }
}

在批处理文件中:

set tmp_file=%TEMP%\%~n0.tmp

rem ----set as per your java directory-------
set java_path=C:\Program Files\Java\jdk1.6.0_43\bin

"%java_path%\java" TestRun1> "%tmp_file%"
set /P p=<"%tmp_file%"
echo %p%

rem -----now p has the value, use it in the command--------

vol231.exe -f %p% imageinfo > Volatility.txt
vol231.exe -f %p% --profile=Win7SP0x86 pslist >> Volatility.txt
vol231.exe -f %p% --profile=Win7SP0x86 dlllist > Volatility.txt
vol231.exe -f %p% --profile=Win7SP0x86 iehistory >> Volatility.txt
vol231.exe -f %p% --profile=Win7SP0x86 svcscan >> Volatility.txt
vol231.exe -f %p% --profile=Win7SP0x86 hivelist >> Volatility.txt
vol231.exe -f %p% --profile=Win7SP0x86 filescan >> Volatility.txt
vol231.exe -f %p% --profile=Win7SP0x86 netscan >> Volatility.txt
pause
del /F "%tmp_file%" 
于 2014-07-15T07:26:08.307 回答
0

在这里,您可以如何将 java 代码添加到批处理文件(尽管它不是您问题的完全解决方案):

 @Deprecated /* >nul 2>&1

:: self compiled java/.bat hybrid
::
:: deprecated is the only one annotation that can be used outside the class definition
:: and is needed for 'mute' start of multi-line java comment
:: that will be not printed by the batch file.
:: though it still created two files - the .class and the .java
:: it still allows you to embed both batch and java code into one file

@echo off
setlocal
java -version >nul 2>&1 || (
    echo java not found
    exit /b 1
)

::find class name
for /f "usebackq tokens=3 delims=} " %%c in (`type %~f0 ^|find /i "public class"^|findstr /v "for /f"`) do (
    set "javaFile=%%c"
    goto :skip
)
:skip

copy "%~f0" "%javaFile%.java" >nul 2>&1

javac "%javaFile%.java" 
java "%javaFile%"

::optional
::del %javaFile%.* >nul 2>&1 
end local
exit /b 0

*******/



public class TestClass
{
    public static void main(String args[])
    {
       System.out.println("selfcompiled .bat/.java hybrid");
    }
}

不推荐使用的注释是我发现的唯一一个可以在类之外设置的注释。并且需要注释以避免有毒输出。它还创建了两个可以删除的临时文件(.class 和 .java)。

于 2014-07-15T08:09:28.437 回答