Стрела диска - PullRequest
       14

Стрела диска

4 голосов
/ 05 января 2010

Используя команду из папки в D: drive

for /f "delims="  %%d in ('cd') do set pathdrv=%%d

echo %pathdrv%

Я получаю «d: \ some folder». Я хочу написать пакетные команды для создания файла автозапуска в корне диска. Пожалуйста, помогите мне удалить букву диска «d:», чтобы вывод «\ some folder», и какие дополнительные изменения я могу сделать, чтобы удалить «\».

Ответы [ 2 ]

10 голосов
/ 05 января 2010

Краткий ответ: используйте синтаксис подстроки, чтобы убрать первые два символа из псевдопеременной %cd%:

%cd:~2%

Чтобы удалить также первую обратную косую черту:

%cd:~3%

Это надежно работает даже с путями Unicode, когда в окне консоли установлены растровые шрифты.


Более длинный ответ с подробным описанием некоторых опций (ни один из которых не работает достаточно хорошо):

Для аргументов в пакетном файле вы можете использовать специальный синтаксис %p1, который дает путь к первому аргументу, заданному для пакетного файла (см. этот ответ ).

Это не работает так же с переменными окружения, но есть два трюка, которые вы можете использовать:

  1. Использовать подпрограмму:

    call :foo "%cd%"
    ...
    goto :eof
    :foo
    set result=%~p1
    goto :eof
    

    Подпрограммы могут иметь аргументы, как и пакетные файлы.

  2. Использование for:

    for %%d in ("%cd%") do set mypath=%%~pd
    

Однако оба варианта не работают, когда

  • Консоль установлена ​​на «Растровые шрифты» вместо шрифта TrueType, такого как Lucida Console или Consolas.
  • Текущий каталог содержит символы Юникода
    • Они не представлены в текущей устаревшей кодовой странице (для западных культур CJK - хороший выбор, который не подходит). Помните, что в этом случае вы будете получать только знаки вопроса вместо символов.

Проблема в том, что переменные окружения могут удерживать Юникод очень хорошо, у вас возникнут проблемы, когда вы попытаетесь настроить командную строку, которая устанавливает их. Каждая опция, описанная выше, опирается на какой-либо вывод перед выполнением команд. Проблема заключается в том, что Unicode не сохраняется, а заменяется на ?. Единственным исключением является вариант подстроки в самом начале этого ответа, который сохраняет символы Unicode в пути даже с растровыми шрифтами.

6 голосов
/ 06 января 2010

Буква диска:

%CD:~0,1%

Полное имя диска (включая двоеточие):

%CD:~0,2%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...