Zwykły znak escape w plikach wsadowych DOS to caret, ^
. Jednak dla procentu, %
, ogranicznik dla zmiennych, ucieczka polega na podwojeniu procentów: %%cd%%
. Rzeczy zmieniają się, gdy używasz pętli parameter extensions wewnątrz pętli . Zamiast %%~dpnx0
emitowania %~dpnx0
, jak to będzie poza pętli, wykonuje substytucję, emitując D:\Scripts\foo.py
.Jak uniknąć procentu (%) podczas używania parametrów w pętli FOR?
Oto demonstracja plik wsadowy:
@echo off
echo This is a pipe: ^|
echo Use this var for the current directory: %%cd%%
echo Use this to echo full path of running batch file: %%~dpnx0
for %%a in (foo.py baz.py) do (
echo @python %%~dpnxa ^> %%~na.bat
)
Są to wyniki uzyskać:
This is a pipe: |
Use this var for the current directory: %cd%
Use this to echo full path of running batch file: %~dpnx0
@python d:\Scripts\foo.py > foo.bat
@python d:\Scripts\baz.py > baz.bat
Ale to, co chcę:
This is a pipe: |
Use this var for the current directory: %cd%
Use this to echo full path of running batch file: %~dpnx0
@python %~dpnxa > foo.bat
@python %~dpnxa > baz.bat
Próbowałem podwojenie Potrojenie i czterokrotne powiększenie procentów to także interspersing carets - wszystko bez powodzenia.
whoa, to dziwne, ale działa, +1. Dzięki! (opóźniając przyjęcie, aby sprawdzić, czy pojawią się jakieś inne rozwiązania) –
@mattwilkie - dodałem kolejny przykład pokazujący, jak podstępny może być problem! – dbenham