Eu só preciso perguntar se isso é um comportamento esperado, mas com certeza me surpreendeu.
Temos um arquivo em lotes que copia alguns arquivos de um subdiretório de onde ele está localizado para outro local em todas as máquinas dos desenvolvedores. Como para alguns desenvolvedores, esse diretório de destino é diferente do restante, definimos uma variável de ambiente do usuário e usamos isso no arquivo em lote.
Esta é uma linha de amostra do arquivo de lote:
ROBOCOPY Staging\*.* "%DISTRIBUTE_TARGET%" *.* /IS
Isso falhou em uma máquina, e depois de alguma experimentação, ocorreu-me que nessa máquina, a variável tinha uma barra invertida como parte do conteúdo variável.
Na maioria das máquinas (na verdade, em todas as outras máquinas, onde funcionava), a variável era assim:
DISTRIBUTE_TARGET=C:\Some\Directory
mas nesta máquina, foi:
DISTRIBUTE_TARGET=C:\Some\Directory\
observe a barra invertida adicionada lá.
A mensagem de erro dada por ROBOCOPY era de que havia algo errado com o segundo parâmetro, mas parecia pensar que tudo, desde o início dessa variável, até o final da linha, estava no segundo parâmetro. / p>
Ou seja. a mensagem de erro ficou assim:
Error in second parameter: "C:\Some\Directory\" *.* /IS"
O que eu suponho que aconteceu é que a barra invertida "escapou" do caractere de citação, que removeu seu significado como "fim do parâmetro citado" e, assim, o resto da linha foi apenas capturado como parte do argumento.
Esse comportamento é esperado? Isso significa que as variáveis com uma barra invertida, por qualquer motivo ou finalidade, simplesmente não podem ser usadas com segurança?