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