Cuando trabajo en un entorno Bash , para establecer el valor de una variable como resultado de un comando, normalmente hago:
var=$(command -args)
donde var
es la variable establecida por el comando command -args
. Luego puedo acceder a esa variable como $var
.
Una forma más convencional de hacer esto que es compatible con casi todos los shell de Unix es:
set var=`command -args`
Dicho esto, ¿cómo puedo establecer el valor de una variable con el resultado de un comando en un archivo por lotes de Windows ? He intentado:
set var=command -args
Pero encuentro que var
está configurado en command -args
lugar de la salida del comando.
fuente
for /f "delims=" %a in ('ver') do @set foobar=%a
en el símbolo del sistema. usofor /f "delims=" %%a in ('ver') do @set foobar=%%a
en archivos de scriptbash
. Entonces puedes escribir comandos bash. También puede ejecutar scripts bash.Hay que tener algo de cuidado, ya que el comando por lotes de Windows:
no tiene la misma semántica que la declaración del shell de Unix:
Considere el caso en el que el comando falla y provoca un error.
En la versión de shell de Unix, la asignación a "theValue" todavía se produce, y cualquier valor anterior se reemplaza por un valor vacío.
En la versión por lotes de Windows, es el comando "for" el que maneja el error y la cláusula "do" nunca se alcanza, por lo que se conservará cualquier valor anterior de "theValue".
Para obtener más semántica similar a Unix en el script por lotes de Windows, debe asegurarse de que se lleve a cabo la asignación:
No borrar el valor de la variable al convertir un script Unix a un lote de Windows puede ser una causa de errores sutiles.
fuente
command
; por ejemplo:for /f "delims=" %%a in ('command1 ^| command2') do set VAR=%%a
.Así es como lo hago cuando necesito los resultados de una consulta de base de datos en mi archivo por lotes:
La clave está en la línea 2: "set / p" establece el valor de "result" en el valor de la primera línea (solo) en "__query.tmp" mediante el operador de redirección "<".
fuente
La única forma en que lo he visto es si haces esto:
ver
es el comando de versión para Windows y en mi sistema produce:Fuente
fuente
Documentos oficiales de Microsoft para
for
comandofuente