我知道通过使用%~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"
请注意,文件名不会缩短,尽管它存在。如果不需要缩短文件名,会发生以下情况:
它与I AWAKE
文件夹名称有关。如果我更改其他文件夹名称,我会得到错误的结果,但如果我更改I AWAKE
为其他名称(不以 开头I ...
),我会得到正确的结果