parâmetro @Batch% ~ s1 fornece um nome abreviado 8.3 incorreto

Estou tentando gravar um arquivo em lotes no Windows XP que usa um nome de caminho completo e gera a versão 8.3 de nome abreviado ...

@echo off
echo "%~s1"

Me deparei com um caso específico em que isso gera um caminho e arquivo incorretos ...

C:\>test.bat "C:\Documents and Settings\angus\Local Settings\Temporary Internet Files\Content.IE5\2JSTM34V\62[1].ja2"
"C:\DOCUME~1\angus\LOCALS~1\TEMPOR~1\Content.IE5\2JSTM34V\62_1_~1.JA2M34V\62[1].ja2"

Observe que a saída acima ("C: \ DOCUME ~ 1 \ angus \ LOCALS ~ 1 \ TEMPOR ~ 1 \ Content.IE5 \ 2JSTM34V \ 62_1_ ~ 1.JA2M34V \ 62 [1] .ja2") não existe. Se eu remover a seção ".JA2M34V \ 62 [1]" dessa saída, no entanto, a sequência resultante será um caminho válido para o arquivo de entrada original.

Parece haver um problema com o uso de colchetes ([]) no nome do arquivo. Se eu criar um arquivo 62.ja2 no mesmo diretório, a saída estará correta ...

C:\>test.bat "C:\Documents and Settings\angus\Local Settings\Temporary Internet Files\Content.IE5\2JSTM34V\62.ja2"
"C:\DOCUME~1\angus\LOCALS~1\TEMPOR~1\Content.IE5\2JSTM34V\62.ja2"

Isso é um bug no Windows? Alguém sabe se existe uma solução alternativa para permitir que o arquivo em lote lide adequadamente com esse nome de arquivo?

questionAnswers(1)

yourAnswerToTheQuestion