Кажется, я не могу назначить переменную окружения другой в пакетном скрипте.

Например, это будет работать:

set varA=C:\this\is\a\directory

и я могу с радостью использовать

find /I "MyString" %varA%

без происшествий. Однако, если я попытаюсь назначить это так,

varA=%ENVVAR%\more\dirs

пакет просто торчит в окно CMD, пока я его не остановлю.

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

1 ответ1

1

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

set x=123

это не то же самое, что

set x = 123

Первый установит %x% 123 , а второй - %x % 123 . (Обратите внимание на пробел после x в имени переменной и еще один до 123 в определении.)

Еще одна вещь, о которой нужно знать, это то, что вы не можете просто сказать var=value Чтобы установить переменную среды, вы должны использовать команду SET .

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

set x=C:\This\is\a\directory
set y=%x%\more\dirs

Затем вы можете использовать команду SET для проверки содержимого этих переменных.

Если вы только изучаете языки сценариев в Windows, возможно, было бы более полезно пропустить пакет и перейти прямо в PowerShell. PowerShell поставляется в стандартной комплектации с Windows Vista и выше, а также доступен для XP. Вот как такая же работа будет выполнена в PowerShell.

$x='C:\This\is\a\directory'
$y="$x\more dirs"

(Примечание: есть причина, по которой двойные кавычки использовались при установке $y , в то время как одинарные кавычки использовались для $x . В этом случае мы могли бы использовать либо для установки $x но двойные кавычки были обязательны для установки $y так как нам нужно было расширить переменную. Вы узнаете больше об этом, когда будете изучать язык.)

Затем, чтобы проверить переменные, вы можете просто вызвать их напрямую.

PowerShell также гораздо менее чувствителен к пробелам в большинстве случаев.

$x=123

такой же как

$x = 123

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .