代码之家  ›  专栏  ›  技术社区  ›  shsteimer

奇数.bat文件行为

  •  1
  • shsteimer  · 技术社区  · 16 年前

    我有一个包含以下内容的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 回复  |  直到 13 年前
        1
  •  1
  •   David M. Miller    16 年前

    这似乎是个愚蠢的问题,但BAT文件所在的上下文中是否存在一个现有的d:drive?

    有一次我遇到这样的情况:BAT文件被用作任务管理器中任务的命令行,但运行方式用户被设置为框中的本地用户,不能访问网络驱动器。

    对于您的情况,如果d:驱动器是网络驱动器,则运行BAT文件,例如,该计算机上的本地管理员帐户(而不是域用户帐户)可能无法访问d:。

        2
  •  3
  •   Jon Skeet    16 年前

    我怀疑这就是问题所在——我希望命令处理器能为您处理这个部分。

    这是它对我有用的证据:

    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);
            }
        }
    }
    

    测试:

    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
    
        3
  •  2
  •   ax. Clement Herreman    16 年前

    1不是无关的:它由cmd.exe插入,表示stdout(而不是“>>”,您也可以编写“1>>”。将其与重定向stderr“2>gt;”进行对比。所以问题一定出在你的参数上。