从参数扩展短名称

时间:2013-03-25 15:44:58

标签: windows batch-file cmd

我知道通过使用%~s1我可以将第一个参数扩展为短路径(ref

现在我有这个奇怪的问题,由于某种原因,文件扩展名被添加到此缩短的路径中。例如,请考虑这个名为test.cmd的简单批处理文件:

@echo %1
@echo %~s1

如果我通过这个论点:

C:\>test.cmd "C:\Documents and Settings\zzz\My Documents\My Music\Library\I AWAKE\[2008] The Core\I Awake - The Cor.m4a"
"C:\Documents and Settings\zzz\My Documents\My Music\Library\I AWAKE\[2008] The Core\I Awake - The Cor.m4a"
C:\DOCUME~1\zzz\MYDOCU~1\MYMUSI~1\Library\IAWAKE~1\_2008_~1\I Awake - The Cor.m4am4a

你可以看到'm4a'被添加到返回的缩短路径中。

有人知道为什么会这样吗?


更新

如果有人愿意这里是如何被复制(我使用相同的文件夹名称,因为我不知道它与使用的一些字符有关):

C:\Temp>md "My Documents\Library\I AWAKE\[2008] The Core\"
C:\Temp>echo test > "My Documents\Library\I AWAKE\[2008] The Core\I Awake - The Core.dat"
C:\Temp>test.cmd "c:\Temp\My Documents\Library\I AWAKE\[2008] The Core\I Awake - The Core.dat"

img

请注意,尽管文件名存在,但文件名不会缩短。如果不需要缩短文件名,那么会发生以下情况:

img

它与I AWAKE文件夹名称有关。如果我更改了其他文件夹名称,我会得到错误的结果,但如果我将I AWAKE更改为其他名称(不是以I ...开头),我会得到正确的结果

1 个答案:

答案 0 :(得分:1)

经过一些研究后,我发现只有一个网站涉及这个问题:http://www.pcreview.co.uk/forums/long-filename-short-filename-conversion-incorrect-t3693699.html。错误发生在具有两个长名称的路径中。在内部,角色长度也起作用:

C:>md "12345 6789\t st"

C:>echo test> "12345 6789\t st\test.dat"

C:>for /r "12345 6789" %i in (*.*) do @echo %~si
C:\123456~1\TST~1\test.datt

此处会发生额外的t。如果第一个路径名称变长,则扩展名也会变得越来越长:

 C:>for /r "12345     6789" %i in (*.*) do @echo %~si
 C:\123456~1\TST~1\test.datt.dat

dir /x命令未受影响。