Пакетное расширение переменной среды, когда переменная заканчивается обратной косой чертой?

Я просто должен спросить, является ли это ожидаемым поведением, оно уверенный удивило меня.

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

Это - демонстрационная строка от пакетного файла:

ROBOCOPY Staging\*.* "%DISTRIBUTE_TARGET%" *.* /IS

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

На большинстве машин (на самом деле, всех других машинах, где это работало), переменная была похожа на это:

DISTRIBUTE_TARGET=C:\Some\Directory

но на этой машине, это было:

DISTRIBUTE_TARGET=C:\Some\Directory\

заметьте добавленную обратную косую черту там.

Сообщение об ошибке, данное ROBOCOPY, было то, что было что-то не так со вторым параметром, но это, казалось, думало, что все от запуска той переменной, и в конец строки, было всем в 2-м параметре.

Т.е. сообщение об ошибке было похоже на это:

Error in second parameter: "C:\Some\Directory\" *.* /IS"

То, что я принимаю, произошло, то, что обратная косая черта "вышла" из символа кавычки, который удалил его значение как "конец заключенного в кавычки параметра", и таким образом остальная часть строки была просто захвачена как часть аргумента.

Это - ожидаемое поведение? Это означает, что переменные с запаздывающей обратной косой чертой, по любой причине или цели, просто не могут безопасно использоваться?

2
задан 07.01.2010, 14:06

1 ответ

От этой статьи:

Если или источник или место назначения являются "заключаемым в кавычки длинным foldername", не включают запаздывающую обратную косую черту, поскольку это будут рассматривать как символ ESC, т.е. "C:\some path\" перестанет работать, но "C:\some path\\", или "C:\some path" будет работать.

Это - проблема, характерная для robocopy. Я даже пошел бы до для вызова этого ошибкой.

У Вас нет никакого другого решения, но добавить код к Вашему пакетному файлу, который проверит и удалит обратную косую черту из конца источника и места назначения.

2
ответ дан 08.12.2019, 05:31

Теги

Похожие вопросы