奇怪的.bat文件行为

时间:2009-02-20 16:59:20

标签: java windows character-encoding batch-file

我有一个包含以下内容的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 个答案:

答案 0 :(得分:3)

我怀疑这是问题所在 - 我希望命令处理器为你处理那部分。

以下证据表明它适合我:

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

答案 1 :(得分:2)

1不是无关的:它由cmd.exe插入,意思是stdout(而不是“&gt;&gt;”,你也可以写“1&gt;&gt;”。对比这个重定向stderr:“2&gt;&gt; “)。所以问题必须与您的参数有关。

答案 2 :(得分:1)

这看起来像是一个愚蠢的问题,但是在bat文件运行的上下文中是否存在现有的D:驱动器?

我遇到一个案例,其中一个bat文件被用作任务管理器中任务的命令行,但Run As用户被设置为该框上的本地用户,无法访问网络驱动器。

根据您的情况进行插值,如果D:驱动器是网络驱动器,则运行bat文件,例如,该计算机上的本地管理员帐户而不是域用户帐户可能无法访问D:。 / p>