Как получить команду ver для печати из пакетного файла?

371
Namey

У меня проблема с пакетным файлом сборки стороннего проекта, с которым я работаю. Он проверяет, является ли ОС 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» в версии).

1
Основываясь на @ JoeMuc2008, мне напомнили, что я неправильно вызвал команду set. Однако, что бы там ни было в ver, это определенно все еще не правильно, так как исходный сторонний код не смог найти в нем слово «Windows» ... (и это явно работало на других машинах с разными конфигами). Я не очень часто использую файлы .bat, поэтому постараюсь вспомнить правильный способ вывода всего содержимого. Namey 7 лет назад 0
Смотрите мой ответ ниже, когда у вас есть шанс. Вы можете использовать этот метод в командном файле, чтобы получить ожидаемые результаты и значение от этой команды, как я объяснил. Кажется, что сначала возвращается пустая строка, а затем `Windows Version ~`, поэтому передайте эту команду команде `find '.'` И используя ее, вы получите только ожидаемое значение, которое вы можете установить в качестве переменной, и т. Д. Pimp Juice IT 7 лет назад 0
Благодарю. Принято. Я никогда не думал, что когда-нибудь буду так доволен тем, что получил от McDonald's. Namey 7 лет назад 1

3 ответа на вопрос

1
JoeMuc2008

Для пояснения: если вы используете 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
Yorik

Пытаться:

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

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

1
Pimp Juice IT

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

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

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

Я стою исправлено. Их сценарий имеет проблему, но это не связано с версией. Принятие и снятие вопроса. Namey 7 лет назад 0