'.bat'文件中的args包含一些空格,我怎样才能正确获取args?

时间:2013-02-27 08:17:48

标签: java batch-file cmd

cmd中的Stat命令:

start.bat -arg1 -ar g2 -arg3

我怎样才能得到第二个arg?字符串'ar g2'包含一个空格。

我需要从bat文件中获取args(可能包含空格字符),然后我将在java文件中处理它们。

有人可以给我一个解决方案吗?非常感谢。

3 个答案:

答案 0 :(得分:3)

在(DOS / Windows)命令行中,应始终包含带引号的空格的参数。 E.g。

start.bat -arg1 "-ar g2" -arg3

使用引号围绕每个参数,即使没有空格的参数也不会受到影响,但是您的批处理脚本需要删除引号(参见下面的代码示例)。

只要我记得(在Windows 3.1 DOS之前的日子里)就是这种情况。当实现长文件名(可能包含空格)时,这变得更加常见。 E.g。

C:\Users\adam>copy "My Documents" "My Backup Files"

(也可以不加引号尝试。)

这是CMD方式,从CMD调用的任何程序都能正确理解这一点。

代码示例(可能对调试很有用,可以查看实际返回的内容。运行带有参数列表的批处理文件或Java类并进行操作。)

批量脚本(代字号)字符是重要的,它会删除周围的引号):


    @echo off
    FOR %%a IN (%*) DO echo [%%~a]

Java (自动删除周围的引号)


    public class TestArg {
        public static void main(String[] args) {
            for (String a : args) {
                System.out.println("[" + a + "]");
            }
        }
    }

答案 1 :(得分:0)

是否可以用|拆分字符串字符,然后修剪值(左+右)?这应该保留中间的空间。

答案 2 :(得分:0)

你可以使用下面的东西......只是概念代码的证明,你需要自己做的其他事情......或者像我一样买一本关于java编程的书。

public static void main(String argv[])
    {
    String argument1 = "";
    String argument2 = "";
    String argument2value = "";
    String argument3 = "";
    for(int c=0;c<argv.length;c++)
        {
        if(argv[c].indexOf("-")==0)
            {
            if(argument1.length() == 0)
                {
                argument1 = argv[c].substring(1,argv[c].length());
                }
            if(argument2.length() == 0)
                {
                argument2 = argv[c].substring(1,argv[c].length());
                }  
            }
        else
            {
            if(argument2.length() != 0)
                {
                argument2value = argument2value + argv[c]
                }
            }
        }
    }