cmd中的stat命令:
start.bat -arg1 -ar g2 -arg3
我怎样才能得到第二个参数?字符串 'ar g2' 包含一个空格。
我需要从 bat 文件中获取 args(可能包含空格字符),然后我将在 java 文件中处理它们。
有人可以给我一个解决方案吗?非常感谢。
cmd中的stat命令:
start.bat -arg1 -ar g2 -arg3
我怎样才能得到第二个参数?字符串 'ar g2' 包含一个空格。
我需要从 bat 文件中获取 args(可能包含空格字符),然后我将在 java 文件中处理它们。
有人可以给我一个解决方案吗?非常感谢。
在 (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 + "]"); } } }
是否可以用 | 分割字符串?字符,然后修剪值(左+右)?这应该保留它们之间的空间。
你可以使用类似下面的东西......只是概念验证代码,其余的你需要自己做......或者像我一样买一本关于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]
}
}
}
}