1

У меня проблема с пакетным файлом сборки стороннего проекта, с которым я работаю. Он проверяет, является ли ОС Windows, используя команду ver . К сожалению, я не могу напечатать команду ver из командного файла, как это происходит в командной строке. Вывод командной строки:

Microsoft Windows [Version 10.0.15063]

Тем не менее, когда я запускаю в командном файле:

set v ver
echo %v%

Выход вместо этого:

v=10.0
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
VS90COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\

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

Обновление: Основываясь на ответе ниже, я обнаружил, что, хотя это и было проблемой, это была не проблема, которая фактически приводила к сбою стороннего пакетного файла. Похоже, что это должно быть связано с проблемой с findstr или %ERRORLEVEL% NEQ 0 (поскольку проблема в том, что он считает, что не нашел строку "Windows" в версии).

3 ответа3

1

Для пояснения: если вы используете set без присваивания значения (например, set value = 10), тогда set вернет все переменные окружения, которые начинаются как указанное вами выражение.

set v

фактически перечислит все переменные, чье имя начинается с v.

Я предполагаю, что вы ранее случайно создали переменную среды v , которая содержит «10.0». Это то, что на самом деле вызывает первую строку вашего вывода. Я уверен, что это не результат CMD. Он просто включен в список, потому что его имя также соответствует заданному шаблону поиска.

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

https://stackoverflow.com/questions/8055371/how-do-i-run-two-commands-in-one-line-in-windows-cmd https://stackoverflow.com/questions/2323292/windows-batch -Присвоить-выход-в-а-программы-для-а-переменной

Извините, я не могу дать вам желаемого решения. Надеюсь, я мог бы помочь разобраться в нескольких вещах, хотя. Желаю вам удачи в поиске идеального решения где-нибудь здесь.

1

Пытаться:

for /f "delims=" %a in ('ver') do @set version=%a

Используйте двойные escape-символы (% становится %%) при использовании внутри командного файла.

1

Передайте команду ver команде find с помощью "." значение, как показано ниже, чтобы сказать ему, что нужно возвращать только строку с точкой из команды ver так как она, кажется, также сначала возвращает пустую строку. Таким образом, вы можете find "." он только перенаправит перезаписать строку с точкой в файл.

ver | find ".">temp.txt
SET /P v= < temp.txt
ECHO %v%

Дополнительные ресурсы

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