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 ver
comando. Desafortunadamente, parece que no puedo imprimir el ver
comando 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 findstr
o %ERRORLEVEL% NEQ 0
(ya que el problema es que cree que no encontró la cadena "Windows" en la versión).
Windows Version ~
modo de tuberías que comando alfind "."
mando y el uso que devuelve sólo el valor esperado que se puede establecer como una variable, etc.Respuestas:
Canalice el
ver
comando alfind
comando con el"."
valor tal como se muestra a continuación para indicarle que devuelva solo la línea con un punto delver
comando, ya que parece que también devuelve primero una línea en blanco. De esta manera, si lo canaliza haciafind "."
él, solo se redireccionará y sobrescribirá la línea con un punto en el archivo.Recursos adicionales
fuente
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ó.
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í.
fuente
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.
fuente