cmd中的Stat命令:
start.bat -arg1 -ar g2 -arg3
我怎样才能得到第二个arg?字符串'ar g2'包含一个空格。
我需要从bat文件中获取args(可能包含空格字符),然后我将在java文件中处理它们。
有人可以给我一个解决方案吗?非常感谢。
答案 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]
}
}
}
}