Я только что заметил очень странное поведение %0
в .bat
файле, вызываемом через %PATH%
.
Где-то в %PATH%
, (скажем, C:\InPath
) , создайте файл xxx.bat
, содержащий:
@echo off
echo this = %~f0
В другом каталоге, где-то не в %PATH%
, (например, C:\NotInPath
) , создайте файл yyy.bat
, содержащий:
@echo off
call "xxx.bat"
Измените рабочий каталог на что угодно (например, C:\SomewhereElse
) и запустите yyy.bat
.То, что я ожидал бы увидеть это:
this = C:\InPath\xxx.bat
То, что я на самом деле получаю:
this = C:\SomewhereElse\xxx.bat
Проблема, очевидно, вызвана кавычками в call
, потому что, если я изменюот строки call
в yyy.bat
до call xxx.bat
, я получаю ожидаемый результат.
Интересно, в чем может быть причина этой разницы в поведении, и если есть что-то, что я могу сделать, чтобы получить правильныйвывод даже с кавычками - например, для облегчения скриптов, содержащих пробел.Без выполнения нового экземпляра cmd.exe
, то есть - мне нужен вызываемый скрипт, чтобы установить некоторые значения среды, которые будут считываться скриптом вызывающей стороны .