Краткий ответ: используйте синтаксис подстроки, чтобы убрать первые два символа из псевдопеременной %cd%
:
%cd:~2%
Чтобы удалить также первую обратную косую черту:
%cd:~3%
Это надежно работает даже с путями Unicode, когда в окне консоли установлены растровые шрифты.
Более длинный ответ с подробным описанием некоторых опций (ни один из которых не работает достаточно хорошо):
Для аргументов в пакетном файле вы можете использовать специальный синтаксис %p1
, который дает путь к первому аргументу, заданному для пакетного файла (см. этот ответ ).
Это не работает так же с переменными окружения, но есть два трюка, которые вы можете использовать:
Использовать подпрограмму:
call :foo "%cd%"
...
goto :eof
:foo
set result=%~p1
goto :eof
Подпрограммы могут иметь аргументы, как и пакетные файлы.
Использование for
:
for %%d in ("%cd%") do set mypath=%%~pd
Однако оба варианта не работают, когда
- Консоль установлена на «Растровые шрифты» вместо шрифта TrueType, такого как Lucida Console или Consolas.
- Текущий каталог содержит символы Юникода
- Они не представлены в текущей устаревшей кодовой странице (для западных культур CJK - хороший выбор, который не подходит). Помните, что в этом случае вы будете получать только знаки вопроса вместо символов.
Проблема в том, что переменные окружения могут удерживать Юникод очень хорошо, у вас возникнут проблемы, когда вы попытаетесь настроить командную строку, которая устанавливает их. Каждая опция, описанная выше, опирается на какой-либо вывод перед выполнением команд. Проблема заключается в том, что Unicode не сохраняется, а заменяется на ?
. Единственным исключением является вариант подстроки в самом начале этого ответа, который сохраняет символы Unicode в пути даже с растровыми шрифтами.