Pseudo-variável de lote de escape

0

Eu preciso chamar um arquivo de lote com um comando que eu quero executar. Este comando contém a pseudo-variável% cd%, que se expande para o diretório atual. Digamos que eu queira executar test "echo %cd%" . O problema é que %cd% se expande antes que test seja chamado.

Normalmente, você pode escapar de uma variável dobrando os sinais percentuais, mas isso não parece se aplicar a pseudo-variáveis. Por exemplo, echo %%ProgramFiles%% imprimirá %ProgramFiles% , mas echo %%errorlevel%% imprimirá %0% . O que eu faço?

    
por Don Reba 04.12.2012 / 02:16

2 respostas

1

O caractere de escape de propósito geral no Prompt de Comando do Windows - o análogo de \ no restante do universo - é caret ( ^ ). Experimente " ^%cd^% ".

(Editar)

... e depois,

echo %1 > temp.bat
call temp.bat
del temp.bat

Sim, é terrivelmente feio e realmente deveria haver uma maneira melhor. Bem, não consigo encontrar.

    
por 04.12.2012 / 02:24
0

Eu não estou tendo muita sorte sem me envolver com o CALL. Com este test.bat:

@%*

invocar chamada test.bat echo ^% cd ^% funciona como esperado. Ou, colocando a CALL dentro de test.bat:

@CALL %*

e invocando test.bat echo ^% cd ^% funciona. (Isso é mais seguro de qualquer forma, já que se o test.bat estiver sendo chamado de outro script, passar um script para ele não correrá o risco de sair prematuramente.)

Suponho que o que funciona melhor para você (ou se algum deles pode funcionar) depende das especificidades do seu cenário.

    
por 17.06.2014 / 21:40