2009-02-20 74 views
1

我有以下内容的批处理文件:奇.bat文件行为

set logfile= D:\log.txt 

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

当我运行该批处理文件,虽然,我得到如下:

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。对不起,浪费你的时间,谢谢你的帮助,尽量抵制太多让我失望的冲动。

回答

1

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

一旦我有一个案例,在任务管理器中使用了bat文件作为任务的命令行,但运行方式用户被设置为框中的本地用户,并且不允许访问网络驱动器。

插补你的情况下,如果d:驱动器是一个网络驱动器,运行BAT文件,比方说,这台机器,而不是一个域用户帐户可能会无法访问d上的本地管理员帐户:。

+0

谢谢,就是这样。我确实注意到了这个错误,并在你的回应之前修正了它,但是你设法弄明白了。 – shsteimer 2009-02-20 18:11:38

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 
2

1不是无关的:它被插入由cmd.exe表示stdout(而不是“>>”),也可以写成“1 >>”。对比这个重定向stderr:“2 >>”)。所以问题必须与您的参数。