Мне просто нужно спросить, является ли это ожидаемым поведением, оно наверняка удивило меня.
У нас есть пакетный файл, который копирует некоторые файлы из подкаталога, в котором он находится, в другое место на каждом компьютере разработчика. Поскольку для некоторых разработчиков этот целевой каталог отличается от остальных, мы установили переменную среды пользователя и использовали ее в командном файле.
Это пример строки из командного файла:
ROBOCOPY Staging\*.* "%DISTRIBUTE_TARGET%" *.* /IS
Это не удалось на одной машине, и после некоторых экспериментов я понял, что на этой машине переменная имеет обратную косую черту как часть содержимого переменной.
На большинстве машин (фактически, на всех других машинах, где она работала) переменная выглядела так:
DISTRIBUTE_TARGET=C:\Some\Directory
но на этой машине было:
DISTRIBUTE_TARGET=C:\Some\Directory\
обратите внимание на добавленную обратную косую черту там.
Сообщение об ошибке, выданное ROBOCOPY, заключалось в том, что со вторым параметром что-то не так, но казалось, что все от начала этой переменной и до конца строки было во втором параметре.
То есть. сообщение об ошибке выглядело так:
Error in second parameter: "C:\Some\Directory\" *.* /IS"
Я предполагаю, что произошло то, что обратная косая черта "ускользнула" от символа кавычки, что удалило его значение как "конец параметра в кавычках", и, таким образом, остальная часть строки была просто взята как часть аргумента.
Это ожидаемое поведение? Означает ли это, что переменные с обратной косой чертой по какой-либо причине или цели просто не могут быть безопасно использованы?