Пакетные файлы говорят, что основной класс не может быть найден или загружен - PullRequest
1 голос
/ 16 марта 2012

, чтобы быть кратким - я написал небольшой класс Parser.class на Java и для него небольшой пакетный скрипт, который выполняет команду: 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 ]

1 голос
/ 16 марта 2012

Похоже, что пакетный файл предполагает, что путь к классу по умолчанию «текущий рабочий каталог» достаточно хорош, но этого не произойдет, если текущий рабочий каталог - это произвольная папка.

Если этоэто просто для удобства, и файлы классов не будут перемещаться, вы можете жестко кодировать путь к классам:

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

(где c:\foo\bar - каталог, содержащий файлы классов).Для более надежного подхода вы должны заставить его определять, где находится пакетный файл, но я не знаю, как это сделать вручную ...

Как только вы исправили проблему с отсутствием классаВы можете также столкнуться с проблемами цитирования, упомянутыми в других комментариях и ответах - но пока вы не сможете запустить свой код, больше ничего не имеет значения:)

1 голос
/ 16 марта 2012

Я не вижу содержимого вашего bat-файла, но, полагаю, вы допустили одну из обычных ошибок новичка в bat-файле.Например, вы можете забыть окружать пути, содержащие пробелы в двойных кавычках. В вашем случае это будет выглядеть так:

java MyClass "%1"

или

java -cp MyClass "%1"

или

java -jar myJar.jar "%1"

Или вы должны сделать

**'cd %~dp0'**

в начале вашего скрипта, чтобы сообщить скрипту, что класс tnat java находится в текущем каталоге.

0 голосов
/ 16 марта 2012

Вы пытались отобразить содержимое %1?
Тогда вы увидите, что окна иногда будут заключать его в кавычки.

Итак, ваша команда расширится до

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

Чтобы решить эту проблему, вы можете просто использовать синтаксис тильды (удаляя заключающие в кавычки)

java Parser "%~1"

Но есть и другая проблема: иногда окна не заключают критический контент в кавычки.

Как и Cool&Stuff.mp3
Это создаст странные ошибки, и это не может быть решено с помощью %1 или %~1, тогда вам нужно использовать переменную %cmdcmdline%, описанную в Перетащите пакетный файл для нескольких файлов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...