Dies ist ein bekannter Fehler in cmd.exe - %~dp0
und Varianten können zu falschen Ergebnissen führen, wenn der Pfad zum Batch-Skript angegeben wurde.
Es gibt eine Problemumgehung. Sie können zuverlässig den Wert aus einem gerufenen Unterprogramm erhalten (beachten Sie, dass mindestens ein Modifikator wie ~d
, ~f
usw. verwendet werden müssen, was Sie das Unterprogramm erhalten :label
)
@echo off setlocal pushd %~dp0 echo From main fails: "%~dp0" call :test popd exit /b :test echo From subroutine OK: "%~dp0"
- BEISPIELAUSGABE -
d:\dir>"my files\test.bat" From main fails: "d:\dir\my files\my files\" From subroutine OK: "d:\dir\my files\"