странное поведение .bat файла - PullRequest
1 голос
/ 20 февраля 2009

У меня есть файл bat со следующим содержимым:

set logfile=  D:\log.txt

java com.stuff.MyClass %1 %2 %3  >> %logfile%

когда я запускаю файл bat, я получаю следующее:

C:\>set logfile= D:\log.txt

C:\>java com.stuff.MyClass <val of %1> <val of %2> <val of %3>   1>>D:\log.txt
The parameter is incorrect.

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

Редактировать

И урок, как всегда, заключается в проверке, подключен ли он в первую очередь, прежде чем обращаться за помощью. Файл bat в управлении версиями использует D: \ log.txt, потому что он предназначен для запуска с сервера, на котором находится диск D. При тестировании моих изменений и работе локально на моем компьютере, на котором нет диска D, я не смог внести изменения в C: \ log.txt, что и стало причиной ошибки. Извините, что потратил ваше время, спасибо за помощь, постарайтесь не поддаваться искушению слишком сильно меня опровергнуть.

Ответы [ 3 ]

3 голосов
/ 20 февраля 2009

Я сомневаюсь, что это проблема - я ожидаю, что командный процессор справится с этой частью за вас.

Вот доказательство того, что это работает для меня:

Test.java:

public class Test
{
    public static void main(String args[]) throws Exception
    {
        System.out.println(args.length);
        for (String arg : args)
        {
            System.out.println(arg);
        }
    }
}

test.bat:

set logfile= c:\users\jon\test\test.log
java Test %1 %2 %3 >> %logfile%

В командной строке:

c:\Users\Jon\Test> [User input] test.bat first second third

c:\Users\Jon\Test>set logfile= c:\users\jon\test\test.log

c:\Users\Jon\Test>java Test first second third  1>>c:\users\jon\test\test.log

c:\Users\Jon\Test> [User input] type test.log
3
first
second
third
2 голосов
/ 20 февраля 2009

1 не является посторонним: он вставляется cmd.exe, что означает stdout (вместо «>>» вы также можете написать «1 >>». Сравните это с перенаправлением stderr: «2 >>»). поэтому проблема должна быть с вашими параметрами.

1 голос
/ 20 февраля 2009

Это может показаться глупым вопросом, но существует ли существующий диск D: в контексте, в котором работает файл bat?

Когда-то у меня был случай, когда файл bat использовался в качестве командной строки задачи в Диспетчере задач, но пользователь «Запуск от имени» был установлен как локальный пользователь на коробке, не давая доступа к сетевым дискам.

Для вашего случая, если бы диск D: был сетевым, то при запуске файла bat, например, учетной записи локального администратора на этом компьютере вместо учетной записи пользователя домена, скорее всего, не было бы доступа к D:.

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