Назначить переменную среды Windows пакетной переменной?


0

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

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

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

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

find /I "MyString" %varA%

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

varA=%ENVVAR%\more\dirs

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

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

Ответы:


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

Это не совсем отвечает, но оказывается, что я полностью указал неправильный (несуществующий) каталог. Я использую% APPDATA% так часто, что забыл, что он указывает на Роуминг, а не на саму папку.
Sclarki

@SacredCrumb Ах, тогда это становится чем-то вроде проблемы XY . В следующий раз, вместо того, чтобы приводить общее обоснование того, что, по вашему мнению, не работает, представьте реальные детали того, что вы на самом деле пытаетесь сделать.
Изи
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.