Приложение nodejs не распознает переменную пакетной среды, установленную ранее
Итак, у меня есть пакетный файл, который запрашивает пользовательский ввод, а затем сохраняет его переменную следующим образом:
set /p name = "Enter name"
Затем мне нужно вызвать приложение js-узла и передать эту переменную в качестве параметра следующим образом:
node app.js %name%
Но когда я console.log(name)
в приложении узла это undefined
,
Как бы я заставить это работать?
Это работает хорошо, если я передаю аргументы вручную. т.е. node app.js testName
,
1 ответ
Линия
set /p name = "Enter name"
какие выводы
"Enter name"
определяет переменную среды с именем name
когда пользователь пакета вводит строку в этом необычном приглашении. Имя переменной заканчивается пробелом!
Ответ на вопрос " Почему не выводится строка с" echo %var% "после использования" set var = text "в командной строке? подробно объясняет, как присвоить строку переменной среды right.
Но использование варианта /P
приводит к дополнительной строковой обработке строки после того, как первый знак равенства интерпретируется как разделитель между именем переменной среды и текстом подсказки.
Если первый символ текста приглашения, начинающийся после первого знака равенства, является двойной кавычкой, то
- Командный процессор Windows удаляет эту двойную кавычку и
- ищет в конце текста подсказки другую двойную кавычку с пропуском завершающих пробелов / табуляций и усекает текст подсказки до позиции последней двойной кавычки текста подсказки.
Текст приглашения печатается так, как определено в пакетном файле, если первый символ после первого знака равенства не является символом двойной кавычки.
Пример пакетного кода для демонстрации манипулирования текстом приглашения командным процессором Windows:
@echo off
setlocal
rem Most often used prompt syntax.
set /P Variable="Enter 1: "
rem Prompt text starts by mistake with a space character resulting
rem in printing the prompt text without removing the double quotes.
set /P Variable= "Enter 2: "
rem Prompt text has no closing double quote and ends with a space.
rem The double quote at beginning is removed, but not the space at end.
set /P Variable="Enter 3:
rem Prompt text has closing double quote and there is a horizontal tab
rem at end of the command line. Double quotes and tab are removed on print.
set /P Variable="Enter 4: "
rem Prompt text has double quotes, but does not start with a double
rem quote. Prompt text is printed exactly as defined in batch file.
set /P Variable=Enter "5: "
rem Prompt text has double quotes, but does not start with a double
rem quote and command line ends by mistake with a tab character. The
rem prompt text is printed exactly as defined in batch file with the tab.
set /P Variable=Enter "6: "
rem Variable name plus prompt text is enclosed in double quotes and therefore
rem the trailing space and trailing tab at end of the command line are ignored.
rem Additionally the prompt text is also enclosed in double quotes resulting in
rem removing the first and last quote of the prompt text and the trailing space
rem and trailing tab of the prompt text. The rest of the prompt text is printed.
set /P "Variable=""Enter 7: " " "
rem ^..printed.^
rem ^..prompt string..^
rem ^...entire parameter string..^
endlocal
Примечание. Конечные пробелы и вкладки не отображаются здесь, но выводятся при запуске пакетного файла:
Enter 1: 1
"Enter 2: "2
Enter 3: 3
Enter 4: 4
Enter "5: "5
Enter "6: " 6
"Enter 7: " 7
Так что в общем лучше всего использовать set /P "variable=prompt"
лайк set "variable=value"
Настоятельно рекомендуется назначать строку переменной среды. Но на использование /P
также можно использовать set /P variable="prompt"
из-за специальной дополнительной обработки текста приглашения командной строки Windows.
Но, пожалуйста, обратите внимание, что set variable="value"
правопреемники "value"
с двойными кавычками и, возможно, с существующими конечными пробелами / табуляциями в строке в командном файле к переменной среды.
Поэтому мой совет всегда использовать "variable=value/prompt"
по команде SET независимо от опции /P
используется для быстрого использования или не используется для простого назначения. aschipfl пишет aschipfl, есть только одно исключение: напечатанный текст подсказки должен начинаться с двойной кавычки. В этом случае лучше использовать
set /P Variable=""Prompt text in quotes: ""
или же
set /P "Variable=""Prompt text in quotes: """
Но я думаю, что такая подсказка очень редко нужна.