Pseudo-variabile batch di escape


0

Devo chiamare un file batch con un comando che voglio che venga eseguito. Questo comando contiene la pseudo-variabile% cd%, che si espande nella directory corrente. Di ', voglio correre test "echo %cd%". Il problema è che si %cd%espande prima che testvenga chiamato.

Normalmente, puoi sfuggire a una variabile raddoppiando i segni di percentuale, ma questo non sembra applicarsi alle pseudo-variabili. Ad esempio, echo %%ProgramFiles%%stamperà %ProgramFiles%, ma echo %%errorlevel%%stamperà %0%. Cosa faccio?

Risposte:


1

Il carattere di escape generico nel prompt dei comandi di Windows - l'analogo di \nel resto dell'universo - è caret ( ^). Prova " ^%cd^%".

(Modificare)

… e poi,

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

Sì, è terribilmente brutto e dovrebbe esserci davvero un modo migliore. Beh, non riesco a trovarlo.


Ah, ma ora test "echo ^%cd^%"stampa %cd%invece della directory corrente. Ciò di cui ho bisogno è che la pseudo-variabile sia preservata quando la passo allo script, ma che sia espansa all'interno.
Don Reba,

OK, ho modificato la mia risposta per risolvere il problema.
Scott,

0

Non sto avendo molta fortuna senza coinvolgere CALL, neanche. Con questo test.bat:

@%*

invocare test.bat call echo ^% cd ^% funziona come previsto. Oppure, inserendo CALL all'interno di test.bat:

@CALL %*

e invocando test.bat echo ^% cd ^% funziona. (Questo è comunque più sicuro, dal momento che se test.bat viene chiamato da un altro script, passare uno script ad esso non correrà il rischio di uscire prematuramente.)

Suppongo che ciò che funziona meglio per te (o se uno dei due può funzionare) dipende dalle specifiche del tuo scenario.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.