Неверный% 0 в файле .BAT - PullRequest
       29

Неверный% 0 в файле .BAT

2 голосов
/ 22 марта 2019

Я только что заметил очень странное поведение %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, то есть - мне нужен вызываемый скрипт, чтобы установить некоторые значения среды, которые будут считываться скриптом вызывающей стороны .

1 Ответ

3 голосов
/ 22 марта 2019

Вы можете исправить это с помощью

@echo off
echo This can be wrong %~f0

call :fixIt
exit /b

:fixIt
echo FixIt %~f0

Ссылка на хорошее объяснение от MC ND
SO: По какой причине путь к пакетному файлу, на который ссылается% ~ dp0, иногда изменяется при смене каталога?

...