Batch parameter %~s1 gives incorrect 8.3 short name

给你一囗甜甜゛ 提交于 2019-11-30 19:51:18

It's not a bug in your code, it's a bug of XP!
With Vista the same code works.

It looks like a sort of a buffer corruption.
It depends of the length of the last directory name, the last characters are copied to the "short name".

And it only occurs if in the filename is one or more characters out of [];,+=<space>

A short test case

@echo off
setlocal EnableDelayedExpansion
set myDir=
set myFile=a[1].bat
set map=123456789ABCDEFGHIJKLMNOPQRSTUVW

for /L %%n in (0 1 26) do (
  set "myDir=!myDir!!map:~%%n,1!"
  md !myDir!
  echo dummy > "!myDir!\!myFile!"
  echo Dir=!myDir!
  for %%X in ("!myDir!\!myFile!") do echo   %%~sX
  echo(
  del "!myDir!\!myFile!" > nul
  rd !myDir!
)

The results of the last lines

Dir=123456789A
  C:\Projekte\batch\123456~1\A_1_~1.BAT

Dir=123456789AB
  C:\Projekte\batch\123456~1\A_1_~1.BATt

Dir=123456789ABC
  C:\Projekte\batch\123456~1\A_1_~1.BATat

Dir=123456789ABCD
  C:\Projekte\batch\123456~1\A_1_~1.BATbat

Dir=123456789ABCDE
  C:\Projekte\batch\123456~1\A_1_~1.BAT.bat

Dir=123456789ABCDEF
  C:\Projekte\batch\123456~1\A_1_~1.BAT].bat

Dir=123456789ABCDEFG
  C:\Projekte\batch\123456~1\A_1_~1.BAT1].bat

Dir=123456789ABCDEFGH
  C:\Projekte\batch\123456~1\A_1_~1.BAT[1].bat

Dir=123456789ABCDEFGHI
  C:\Projekte\batch\123456~1\A_1_~1.BATa[1].bat

Dir=123456789ABCDEFGHIJ
  C:\Projekte\batch\123456~1\A_1_~1.BAT\a[1].bat

Dir=123456789ABCDEFGHIJK
  C:\Projekte\batch\123456~1\A_1_~1.BATK\a[1].bat

Dir=123456789ABCDEFGHIJKL
  C:\Projekte\batch\123456~1\A_1_~1.BATKL\a[1].bat

Dir=123456789ABCDEFGHIJKLM
  C:\Projekte\batch\123456~1\A_1_~1.BATKLM\a[1].bat

Dir=123456789ABCDEFGHIJKLMN
  C:\Projekte\batch\123456~1\A_1_~1.BATKLMN\a[1].bat

Dir=123456789ABCDEFGHIJKLMNO
  C:\Projekte\batch\123456~1\A_1_~1.BATKLMNO\a[1].bat

Dir=123456789ABCDEFGHIJKLMNOP
  C:\Projekte\batch\123456~1\A_1_~1.BATKLMNOP\a[1].bat

Dir=123456789ABCDEFGHIJKLMNOPQ
  C:\Projekte\batch\123456~1\A_1_~1.BATKLMNOPQ\a[1].bat

Dir=123456789ABCDEFGHIJKLMNOPQR
  C:\Projekte\batch\123456~1\A_1_~1.BATKLMNOPQR\a[1].bat
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!