Во-первых, я видел этот раздел, но я не мог этого понять.
Вопрос:
В D:\path\to\file.bat имеется пакетный файл со следующим содержимым:
echo %cd%
pause
Выход:
C:\
Это должно быть D:\path\to
Что я делаю неправильно?
Ответ 1
Переменная %CD% только для чтения сохраняется путь к вызывающему абоненту пакета, а не к пакетному файлу.
Вы можете получить имя самого пакета script как введенного пользователем с помощью %0 (например, scripts\mybatch.bat). Для этого могут применяться расширения параметров, поэтому %~dp0 вернет диск и путь к пакету script (например, W:\scripts\) и %~f0 вернет полное имя пути (например, W:\scripts\mybatch.cmd).
Вы можете ссылаться на другие файлы в той же папке, что и пакет script, используя этот синтаксис:
CALL %0\..\SecondBatch.cmd
Это может быть даже использовано в подпрограмме, Echo %0 даст метку вызова, но echo "%~nx0" даст вам имя файла пакета script.
Когда переменная %0 расширяется, результат заключен в кавычки.