Escape pseudo-zmienna wsadowa

0

Muszę wywołać plik wsadowy za pomocą polecenia, które ma wykonać. Ta komenda zawiera pseudo-zmienną% cd%, która rozwija się do bieżącego katalogu. Powiedz, chcę uciekać test "echo %cd%". Problemem jest %cd% rozszerza się wcześniej test jest nazywany.

Zwykle można uciec od zmiennej, podwajając znaki procentu, ale nie wydaje się to mieć zastosowania do pseudo-zmiennych. Na przykład, echo %%ProgramFiles%% wydrukuje %ProgramFiles%, ale echo %%errorlevel%% wydrukuje %0%. Co ja robię?

Don Reba
źródło

Odpowiedzi:

1

Znak ucieczki ogólnego przeznaczenia w wierszu polecenia systemu Windows - analog \ w pozostałej części wszechświata - jest ostrożny ( ^ ). Próbować " ^%cd^%

(Edytować)

… i wtedy,

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

Tak, to jest okropnie brzydkie i naprawdę powinien być lepszy sposób. Cóż, nie mogę tego znaleźć.

Scott
źródło
Ach, ale teraz test "echo ^%cd^%" wydruki %cd% zamiast bieżącego katalogu. Potrzebuję, aby pseudo-zmienna została zachowana, gdy przekażę ją do skryptu, ale rozwinęłam ją wewnątrz.
Don Reba
OK, zredagowałem moją odpowiedź, aby rozwiązać ten problem.
Scott
0

Nie mam zbyt wiele szczęścia bez zaangażowania CALL. Z tym testem.bat:

@%*

przywoływać test.bat wywołanie echo ^% cd ^% działa zgodnie z oczekiwaniami. Lub umieszczając CALL wewnątrz test.bat:

@CALL %*

i wzywanie test.bat echo ^% cd ^% Prace. (W każdym razie jest to bezpieczniejsze, ponieważ jeśli test.bat zostanie wywołany z innego skryptu, przekazanie skryptu do niego nie spowoduje ryzyka przedwczesnego zakończenia).

Przypuszczam, że to działa lepiej dla ciebie (lub jeśli w ogóle możesz pracować) zależy od specyfiki twojego scenariusza.

Ben Nesson
źródło