Подтвердить что ты не робот

Проверьте, не определена ли переменная среды без расширений команд и без использования командного файла?

Мне нужно использовать командную строку cmd.exe(cmd.exe вызывается из инструмента построения gyp), чтобы определить, определена ли переменная среды или нет. Как я могу это сделать? Я в порядке, полагая, что значение переменной не содержит одиночных или двойных кавычек, но не может предполагать, что расширения команд включены.

Я пробовал следующее, которое отлично работает в .bat файле, но сбой при вводе непосредственно в командной строке:

IF "%UNDEFINED%" == "" (echo yes)

Когда эта точная строка находится в файле .bat и выполняется, я вижу в качестве вывода yes. Когда я ввожу его в командной строке, вывод пуст. Я тестирую это на Windows XP SP3, хотя мой коллега видит те же результаты в Windows 7. Это метод, предложенный http://support.microsoft.com/kb/121170 и http://www.robvanderwoude.com/battech_defined.php. Я не хочу использовать IF DEFINED UNDEFINED (echo yes), потому что это не будет работать, если расширения команд отключены.

Самый верный ответ в следующем сообщении привел меня к мысли, что эта проблема связана с тем, как процентное расширение обрабатывается по-разному в "CmdLineParser" по сравнению с "BatchLineParser", но до сих пор не привело меня к решение: Как интерпретатор сценариев Windows Command Interpreter (CMD.EXE)?

4b9b3361

Ответ 1

ОК, это заняло немного, но я думаю, что понял это. Попробуйте следующее:

SET UNDEFINED 2>Nul | Findstr/I "."
IF ERRORLEVEL 1  ECHO Not Defined.

Это работает для всех случаев AFAIK и не зависит от каких-либо функций расширения команд.

Ответ 2

Errr... just:

if defined your-var-name ( 
    echo yarp
) else (
    echo narp
)

Я должен добавить, я не верю, что для этого нужны расширения команд...

Ответ 3

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

IF %UNDEFINED% == %^UNDEFINED% (echo yes)

Это работает так, как будто undefined не существует, но не заменяется, также ^undefined, но каретка будет удалена в следующей фазе парсера, поэтому %undefined% сравнивается с %undefined%. Недостатком является отсутствие котировок, так как они также делают выражение устойчивым к специальным символам.

Лучше всего использовать IF defined, но если расширения отключены, вам нужно сначала включить их.

cmd /E:on /c "if not defined undefined echo It undefined"

Лучший способ - просто использовать пакетный файл, который также должен работать с системой сборки gyp.

Ответ 4

Я пробовал это, и он работал:

@echo off

setlocal disableextensions

set x=%path%
if "%x%"=="" (echo "PATH" does not exist) else (echo "PATH" exists)

set x=%pathx%
if "%x%"=="" (echo "PATHX" does not exist) else (echo "PATHX" exists)

endlocal

Он вернул:

"PATH" exists
"PATHX" does not exist