【问题标题】:Batch files says the main class can't be found or loaded批处理文件说找不到或无法加载主类
【发布时间】:2012-04-01 18:37:11
【问题描述】:

简而言之 - 我用 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" 

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    (其中c:\foo\bar 是包含类文件的目录)。对于更健壮的方法,您应该让它检测批处理文件的位置,但我不知道该怎么做...

    一旦您解决了找不到类的问题,您可能遇到其他 cmets 和答案中提到的引用问题 - 但在您可以运行您的代码之前,别无其他相关的:)

    【讨论】:

      【解决方案2】:

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

      java MyClass "%1"
      

      java -cp MyClass "%1"
      

      java -jar myJar.jar "%1"
      

      或者你应该这样做

      **'cd %~dp0'**

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

      【讨论】:

      • 您好,感谢您的回复。这是我的批处理脚本:@echo off&&setLocal EnableDelayedExpansion if "%1"=="" (echo 请把你的文件拖到图标上。echo.pause&&goto :eof) cls java Parser "%~1" pause 知道该怎么做现在?
      【解决方案3】:

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

      因此您的命令将扩展为类似

      java Parser ""C:\documents & setting\mytest.log""
      

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

      java Parser "%~1"
      

      但还有一个问题,有时 windows 不会用引号括起关键内容。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-26
        • 2015-06-01
        • 2014-01-07
        • 2019-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多