Два процента, окружающие число как переменную? - PullRequest
1 голос
/ 12 марта 2020

В пакетном режиме я обнаружил, что в моей балансовой единице есть фрагмент ARG1 = "% 1%". Но что это значит? % 1 будет обозначать первую команду ввода, но дополнительный процент либо кажется плохой практикой кодирования, либо чем-то настолько скрытым, что никто не знает (единственный ответ, который я получил, это системные переменные, но «1» кажется ужасным именем для этого).

1 Ответ

1 голос
/ 13 марта 2020

Учитывая, что мы говорим о пакете, я думаю, что код, который вы видели, был set arg1="%1%" (без пробелов вокруг =).

Вы правы, %1% будет интерпретироваться как %1 (первый аргумент / параметр в пакетном файле), за которым следует один %, который интерпретатор игнорирует, поскольку не находит второй %, чтобы закрыть имя переменной. ( Примечание 2 )

Это работает (потому что интерпретатор "исправляет" это (вроде - Примечание 2 )), но синтаксически неверно (вероятно, должно быть set ARG1="%1", что все еще является плохой практикой кодирования ( Примечание 1 ) - но это трудно решить, не видя контекста (иначе "больше кода"))


Примечание 1: (хорошо описывается @aschipfl): лучший (и рекомендуемый) способ - set "ARG1=%~1", который сначала удаляет потенциальное цитирование (из-за ~), а затем присваивает значение переменной ARG1 без кавычек (обратите внимание на позицию открытия "); что-то вроде set ARG1="%~1" будет включать кавычки в значение переменной, с которой неудобно обращаться (представьте, что вы хотите объединить два значения: как будет выглядеть следующее, когда отдельные значения были заключены в кавычки? например, D:\%FDIR%\%FNAME%) (don не используйте значения в кавычках - вместо этого поместите их в кавычки)

Примечание 2: не полагайтесь на это; что-то вроде set combined=%1%-%2% с первым параметром alpha и вторым с beta будет интерпретировано как alpha2 (первый аргумент %1, переменная * (вероятно, неопределенная) %-%, литерал 2 и осиротевший %, который игнорируется)

Примечание 3: (как прокомментировал @Mark) установка параметра для переменной в большинстве случаев не требуется, вы всегда можете ссылаться на него с помощью %1 или %~1 (при необходимости). Дополнительная переменная вам нужна только тогда, когда вы хотите выполнить с ней подстроки (это не работает с %1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...