Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ';中的参数;。bat&x27;文件包含一些空格,如何正确获取参数?_Java_Batch File_Cmd - Fatal编程技术网

Java ';中的参数;。bat&x27;文件包含一些空格,如何正确获取参数?

Java ';中的参数;。bat&x27;文件包含一些空格,如何正确获取参数?,java,batch-file,cmd,Java,Batch File,Cmd,cmd中的Stat命令: start.bat -arg1 -ar g2 -arg3 我怎样才能得到第二个arg?字符串“ar g2”包含一个空格 我需要从bat文件中获取参数(可能包含空格字符),然后在java文件中处理它们 谁能给我一个解决办法?非常感谢。是否可以用|字符分割字符串,然后修剪值(左+右)?这应该保留中间的空格。在(DOS/Windows)命令行中,应该始终用引号将包含空格的参数括起来。例如 start.bat -arg1 "-ar g2" -arg3 用引号括住每个参数,即

cmd中的Stat命令:

start.bat -arg1 -ar g2 -arg3
我怎样才能得到第二个arg?字符串“ar g2”包含一个空格

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


谁能给我一个解决办法?非常感谢。

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

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

start.bat -arg1 "-ar g2" -arg3
用引号括住每个参数,即使是没有空格的参数,也不会有什么坏处,但是批处理脚本需要删除引号(请参见下面的代码示例)

从我记事起(Windows3.1DOS之前的日子),这种情况就一直存在。当长文件名(可能包含空格)被实现时,这种情况变得更加普遍。例如

C:\Users\adam>copy "My Documents" "My Backup Files"
(也可以不加引号地尝试)

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

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

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

@回音 对于(%*)中的%%a,执行回显[%%~a] Java(周围的引号自动删除)

公共类测试{ 公共静态void main(字符串[]args){ for(字符串a:args){ System.out.println(“[”+a+“]); } } }
你可以使用下面这样的东西。。。只是概念验证代码,其余的你需要自己做。。。或者像我一样买一本关于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]
                }
            }
        }
    }
publicstaticvoidmain(字符串argv[])
{
字符串argument1=“”;
字符串argument2=“”;
字符串argument2value=“”;
字符串argument3=“”;

对于(int c=0;cBy)顺便说一句,如果您确实想成为非标准的,您可以让您的BAT或其他程序循环所有参数,并将所有不以“-”开头的参数与前一个参数连接起来。然而,这更为复杂。由于操作系统没有办法,它也会得到多个空格的值(命令行)知道有更多的空格。而不是使用引号。您好,Friedwin。我已经尝试过这个。CMD将提示警告:g2“”此时发生意外。您好@Xxg,请再次查看您键入的内容。您似乎在参数后键入了两个引号。您应该在arg值的开头键入一个引号,在结尾键入一个引号(如果没有帮助,请复制一个命令行示例)。请记住,操作系统需要将命令行拆分为命令(bat文件名)和参数-它无法区分哪些空格是独立的参数,哪些空格是参数值的一部分,除非您将包含空格的参数用引号括起来(例如,
“arg with spaces”
).Hi Friedwin,谢谢你的帮助,我发现我的“bat”文件的代码不正确,我已经修复了它。你完全正确。只是一个简单的提示,要想不加引号地将它取回,你可以使用“set arg1=%~1”。那么,你可以检查我答案旁边的复选框;-) public class TestArg { public static void main(String[] args) { for (String a : args) { System.out.println("[" + a + "]"); } } }
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]
                }
            }
        }
    }