批处理文件说无法找到或加载主类

时间:2012-03-16 07:36:01

标签: java parsing batch-file drag-and-drop

简短 - 我在Java中编写了一个小的Parser.class,并在其中编写了一个执行命令的小批处理脚本:java Parser“%1” 我的想法是,我想将日志文件拖放到批处理脚本上,然后将其作为参数移交给我的类。 到目前为止,如果我将日志文件放在与批处理脚本和java类相同的文件夹中,一切正常。但是,如果日志文件是例如在桌面上,我将它直接拖到另一个文件夹中的批处理文件,我收到无法找到或加载主类Parser的错误。 知道这里可能有什么问题吗?我想将日志文件从任何位置拖到批处理上。

编辑: 这是我的批处理脚本:

@echo off&&setLocal EnableDelayedExpansion 
if "%1"=="" ( 
echo Please drag your file onto the icon. 
echo. 
pause&&goto :eof) 
cls 
java Parser "%~1" 

知道现在该怎么办?应该使用“〜”来避免文件路径中的空格问题,正如我所说的,当所有文件都在同一个文件夹中时,我的批处理脚本按预期工作...

3 个答案:

答案 0 :(得分:1)

听起来批处理文件假设“当前工作目录”的默认类路径足够好 - 但如果当前工作目录是某个任意文件夹则不会。

如果这只是为了方便而且类文件不会移动,您可以对类路径进行硬编码:

java -cp c:\foo\bar Parser "%1"

(其中c:\foo\bar是包含类文件的目录)。对于更强大的方法,您应该检测批处理文件的位置,但我不知道如何随意执行...

一旦你修复了找不到类的问题,你可能遇到其他评论和答案中提到的引用问题 - 但是在你能让代码运行之前,没有别的东西是相关:))

答案 1 :(得分:1)

我没有看到你的bat文件内容,但我想你做了一个常见的bat-file初学者的错误。例如,您可能忘记环绕路径,包含带双引号的空格。在您的情况下,这将如下所示:

java MyClass "%1"

java -cp MyClass "%1"

java -jar myJar.jar "%1"

或者你应该做

**'cd %~dp0'**

在脚本开头让脚本知道tnat java类在当前目录中。

答案 2 :(得分:0)

您是否尝试显示%1的内容? 然后你会看到窗口有时会用引号括起来。

所以你的命令会扩展到像

这样的东西
java Parser ""C:\documents & setting\mytest.log""

要解决此问题,您可以简单地使用波浪语法(删除封闭引号)

java Parser "%~1"

但是还有另外一个问题,有时候windows并没有用引号括起关键内容。

Cool&Stuff.mp3
这会产生奇怪的错误,使用%1%~1无法解决,那么您需要使用Drag and drop batch file for multiple files %cmdcmdline%变量>