Это происходит потому, что немедленное расширение %
происходит до того, как специальные символы, такие как круглые скобки, будут распознаны.
Чтобы предотвратить ввод строки в кавычки, специальные символы защищены:
@echo off
echo %%~dp0 outside the code block = "%~dp0"
if 0 EQU 0 (
echo %%~dp0 inside the code block = "%~dp0"
)
Конечно, кавычка может беспокоить. Но вы можете использовать отложенное расширение , чтобы повторить путь без кавычек:
@echo off
set "string=%~dp0"
setlocal EnableDelayedExpansion
echo %%~dp0 outside the code block = !string!
if 0 EQU 0 (
echo %%~dp0 inside the code block = !string!
)
endlocal
В качестве альтернативы вы можете использовать for
l oop для достижения другой фазы расширения после распознавания специальных символов:
@echo off
for %%I in ("%~dp0") do (
echo %%~dp0 outside the code block = %%~I
if 0 EQU 0 (
echo %%~dp0 inside the code block = %%~I
)
)