Назад | Перейти на главную страницу

Пробелы в команде SETX PATH

Предположим, мой ПУТЬ C:\WINDOWS\system32\;C:\Program Files\Important\

SET NEW_PATH=C:\My\Dir\
SETX PATH "%PATH%;%NEW_PATH%"

Результаты на пути:

C:\WINDOWS\system32\;C:\Program Files\Important\;C:\My\Dir"

Обратите внимание на кавычки в конце пути. Это как если бы обратная косая черта в конце% NEW_PATH% экранировала последнюю кавычку. Мне нужны кавычки, потому что на моем пути есть пробелы, но я не хочу, чтобы обратная косая черта интерпретировалась как escape-символы.

Как правильно включить мой PATH в вызов SETX?

Не ставьте обратную косую черту в конце %NEW_PATH%.

Если вместо того, что вы контролируете, вы для начала получили случайный ввод, вы можете выполнить одно из следующих действий:

  • Оставьте закрывающую кавычку. В некоторых случаях это работает:

    > setx foo "bar baz
    
    > echo %foo%
    bar baz
    

    Но у других дела обстоят не так хорошо:

    > setx foo "Some stuff "with" embeddded quotes
    
    > echo %foo%
    Some stuff with embeddded quotes
    

    Однако у вас уже есть эта проблема с самого начала, поэтому то, что вы там сделали, было в лучшем случае опасным, поскольку оно уничтожило бы цитируемые пути. (что вам нужно, если ваш путь включает точку с запятой).

    Это приводит нас к следующему варианту:

  • Правильно избегайте всего, что входит в команду:

    set NEW_PATH=C:\I\Hate\User\Dirs\In\The\Root\
    rem Note the extra quotation marks; we're constructing the complete
    rem argument to setx here.
    set NEW_PATH_VAR="%PATH%;%NEW_PATH%"
    rem The great escape
    set NEW_PATH_VAR=%NEW_PATH_VAR:"=\"%
    setx PATH %NEW_PATH_VAR%
    

Если NEW_PATH не содержит пробелов, то цитировать его не нужно:

SET NEW_PATH=C:\My\Dir\
SETX PATH "%PATH%";%NEW_PATH%

Если NEW_PATH действительно содержит пробелы, вы можете использовать буквальное значение и снова не указывать последнюю обратную косую черту:

SETX PATH "%PATH%;C:\My Dir"\