2012-03-16 40 views
1

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

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

@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 Parser ""C:\documents & setting\mytest.log"" 

为了解决这个问题,你可以简单的使用波浪语法(去除封闭引号)

java Parser "%~1" 

但是还有一个问题,有时窗户没有按不要用引号括起关键内容。

Cool&Stuff.mp3
这将创建一个奇怪的错误,也不能使用%1%~1来解决,那么你需要使用%cmdcmdline%变量,在Drag and drop batch file for multiple files

1

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

如果这仅仅是为了方便和类文件不会移动,你可以硬编码的类路径:

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

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

一旦你解决了找不到类的问题,你可能碰上其他意见和回答中提到的报价问题 - 但是,直到你能得到你的代码运行,没有其他相关:)

1

我没有看到你的bat文件的内容,但我想你做一个通常的蝙蝠文件初学者的错误。例如,你可能忘记围绕路径,包含带双引号的空格。在你的情况,这将是这样的:

java MyClass "%1" 

java -cp MyClass "%1" 

java -jar myJar.jar "%1" 

还是应该在begini做

**'cd %~dp0'**

ng脚本让脚本知道tnat java class在当前目录中。

+0

你好,谢谢你的回复。这是我的批处理脚本: 关闭@echo && SETLOCAL EnableDelayedExpansion 如果 “%1” == “”( 回声请拖动文件到图标 回声 暂停&&转到:。EOF) CLS Java解析器“%〜1 “ 暂停 任何想法现在该做什么? – 2012-03-16 08:58:41

相关问题