1

cmd中的stat命令:

start.bat -arg1 -ar g2 -arg3

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

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

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

4

3 回答 3

3

在 (DOS/Windows) 命令行上,您应该始终用引号将包含空格的参数括起来。例如

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

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

从我记事起就是这种情况(Windows 3.1 之前的 DOS 时代)。当实现长文件名(可能包括空格)时,这变得更加普遍。例如

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

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

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

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

批处理脚本(波浪号)字符很重要,它删除了周围的引号):

    @echo 关闭
    FOR %%a IN (%*) DO 回显 [%%~a]

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

    公共类 TestArg {
        公共静态无效主要(字符串[]参数){
            对于(字符串 a : args){
                System.out.println("[" + a + "]");
            }
        }
    }

于 2013-02-27T08:26:24.177 回答
0

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

于 2013-02-27T08:25:39.400 回答
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]
                }
            }
        }
    }
于 2013-02-27T08:29:21.257 回答