¿Cómo obtener el comando ver para imprimir desde un archivo por lotes?


1

Tengo un problema con un archivo por lotes de compilación de un proyecto de terceros con el que estoy trabajando. Comprueba si el sistema operativo es Windows mediante el vercomando. Desafortunadamente, parece que no puedo imprimir el vercomando desde el archivo por lotes como lo hace en la línea de comando. La salida de la línea de comando es:

Microsoft Windows [Version 10.0.15063]

Sin embargo, cuando ejecuto un archivo por lotes:

set v ver
echo %v%

La salida es en cambio:

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\

Lo que parece estar dándome la versión de Windows (aunque no con todos los detalles), y luego versiones de un montón de otras cosas. ¿Hay alguna razón por la cual esto funcionaría de manera diferente o está fallando? ¿Alguien sabe cómo llamar al comportamiento original que se observa en la línea de comando? El script de terceros parece estar esperando el comportamiento de la versión de línea de comando.

Actualización: según la respuesta a continuación, descubrí que si bien esto era un problema, no era el problema lo que realmente causaba que fallara el archivo por lotes de terceros. Parece que debe ser debido a un problema con findstro %ERRORLEVEL% NEQ 0(ya que el problema es que cree que no encontró la cadena "Windows" en la versión).


Basado en @ JoeMuc2008, recuerdo que no invoqué el comando set correctamente. Sin embargo, lo que sea que esté en el ver definitivamente todavía no está bien, ya que el código original de terceros no pudo encontrar la palabra "Windows" en él ... (y esto claramente funcionó en otras máquinas con configuraciones diferentes). No uso mucho los archivos .bat en estos días, por lo que intentaré recordar la forma correcta de generar el contenido completo.
Namey

Vea mi respuesta a continuación cuando tenga la oportunidad. Puede usar ese método en un archivo por lotes para obtener los resultados esperados y el valor de ese comando tal como lo expliqué. Parece devolver una línea en blanco primero y luego el Windows Version ~modo de tuberías que comando al find "."mando y el uso que devuelve sólo el valor esperado que se puede establecer como una variable, etc.
Pimp Juice TI

1
Gracias. Aceptado. Nunca pensé que estaría tan contento con algo que obtuve de McDonald's.
Namey

Respuestas:


1

Canalice el vercomando al findcomando con el "."valor tal como se muestra a continuación para indicarle que devuelva solo la línea con un punto del vercomando, ya que parece que también devuelve primero una línea en blanco. De esta manera, si lo canaliza hacia find "."él, solo se redireccionará y sobrescribirá la línea con un punto en el archivo.

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

Recursos adicionales


Estoy corregido. Su script tiene un problema, pero no se debe a la versión. Aceptar y retirar la pregunta.
Namey

1

Para aclarar primero, si usa set sin una asignación de valor (como set value = 10 ), set devolverá todas las variables de entorno que comiencen como la expresión que especificó.

set v

en realidad enumerará todas las variables cuyo nombre comienza con una v .

Supongo que ha creado previamente una variable de entorno v por accidente que contiene "10.0". Eso es lo que realmente causa la primera línea de su salida. Estoy bastante seguro de que no es resultado de cmd . Solo se incluye en la lista porque su nombre también coincide con el patrón de búsqueda dado.

Desafortunadamente, aquí es donde están terminando mis ideas. Hay algunas soluciones sobre cómo capturar la salida de un comando en una variable de entorno, pero no lo hice funcionar con ver :

https://stackoverflow.com/questions/8055371/how-do-i-run-two-commands-in-one-line-in-windows-cmd https://stackoverflow.com/questions/2323292/windows-batch -assign-output-of-a-program-to-a-variable

Lo siento, realmente no puedo darte la solución deseada. Sin embargo, espero poder ayudar a resolver algunas cosas. Deseándole buena suerte para encontrar la solución perfecta en algún lugar aquí.


1

Tratar:

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

Use escapes dobles (% se convierte en %%) cuando lo use dentro de un archivo por lotes.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.