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?