Это известная ошибка / дефект дизайна в cmd.exe - %~dp0
и варианты могут дать неправильный результат, если был указан путь к пакетному сценарию.
Есть обходной путь. Вы можете надежно получить значение из подпрограммы CALLed (обратите внимание, что должен использоваться хотя бы один модификатор, такой как ~d
и ~f
т. Д., Иначе вы получите подпрограмму :label
)
@echo off setlocal pushd %~dp0 echo From main fails: "%~dp0" call :test popd exit /b :test echo From subroutine OK: "%~dp0"
- ВЫБОР ВЫБОРА -
d:\dir>"my files\test.bat" From main fails: "d:\dir\my files\my files\" From subroutine OK: "d:\dir\my files\"