奇怪的.bat文件的行为

我有一个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驱动器的服务器运行。 在testing我的更改并在本地运行时,在没有D驱动器的计算机上,我未能更改为使用C:\ log.txt,这是导致错误的原因。 对不起,浪费你的时间,谢谢你的帮助,尽量抵制冲动太多的压力。

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

一旦我有一个情况,在任务管理器中使用一个bat文件作为一个任务的命令行,但是运行方式用户被设置为一个本地用户,没有访问网络驱动器。

如果D:驱动器是一个网络驱动器,那么运行bat文件(比如说,该机器上的本地管理员帐户而不是域用户帐户)可能无法访问D :.

我怀疑这是个问题 – 我希望命令处理器能够为你处理这个部分。

这是它为我工作的证据:

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不是无关的:它是由cmd.exe插入的,意思是标准输出(而不是“>>”,也可以写成“1 >>”,反之则重定向stderr:“2 >>”)。 所以问题必须与您的参数。