另一个问题提出了一个有趣的问题:
在Windows上,Java File.pathSeparatorChar
是;
,这是正确的。然而,分号也是文件夹或文件名的有效字符。你可以在Windows上创建一个名为Test;Test1
的文件夹。
问题是:如果路径列表既包含绝对路径又包含相对路径,如何确定路径中的分号实际上是路径的分隔符还是目录名的一部分?
;
,则路径必须用双引号"
括起来。mkdir "foo;bar"
echo echo execute %%~dpnx0 > "foo;bar\dummy.cmd"
set PATH=%PATH%;"foo;bar"
dummy.cmd
execute R:\temp\foo;bar\dummy.cmd
意味着路径设置找到了dummy.cmd
。
编辑 从评论中可以看出:使用分号可能会导致一些麻烦。最好避免使用包含分号的目录名。
由于问题是关于Java的,基于@SubOptimal answer 的解释,说明带有分号的路径应该用引号括起来,下面是一个小代码示例,用于从这样的列表中提取由File.pathSeparator
分隔的路径:
String separatedList = "\"test;test1\";c:\\windows;\"test2\";test3;;test4";
String pattern = String.format("(?:(?:\"([^\"]*)\")|([^%1$s]+))%1$s?", File.pathSeparator);
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(separatedList);
while (m.find())
{
for (int i = 1; i <= m.groupCount(); i++)
{
String path = m.group(i);
if (path != null)
System.out.println(path);
}
}
作为参考,不带转义字符的正则表达式是(?:(?:"([^"]*)")|([^;]+));?
。
PATH
中,分号始终是一个分隔符。如果您有一个名称中带有分号的文件夹,可以将其短替代名称放入PATH
中。要查找短名称,请使用DIR /X
命令。例如:C:\> dir test* /X
<DIR> **TEST_T~1** Test;Test1
C:\> set PATH=TEST_T~1;%PATH%
PATH
将您的文件夹解释为文件夹,则需要使用不包含分隔符的形式。 - Always Learning
where dummy
吗? - Thorsten Dittmar