Tengo un archivo por lotes que se supone que debe establecer algunas variables al principio.
for /f %%A in ('wmic os get osarchitecture ^| find /i "bit"') do set "OSARCH=%%A"
for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%'" get name') do set "DNVER=%%B"
for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion' do set "IEFULLVER=%%C"
set IEVER=%IEFULLVER:~0,4%
Si los ejecuto en el indicador CMD (sustituyendo %%A por %A, etc.), funcionan como se esperaba, pero cuando ejecuto el archivo por lotes, la primera línea se ejecuta como se esperaba y luego aparece un & was unexpected at this time
error. Estoy pensando que podría tener que ver con %
after .NET
, pero tiene que estar ahí, de lo contrario la consulta wmi no devolverá el valor que necesito.
Respuesta1
Error "& fue inesperado en este momento"
Hay dos errores en su archivo por lotes.
Error 1:
for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%'" get name') do set "DNVER=%%B"
El comando anterior necesita tener el single %
después de NET
escape. Utilice %%
en su lugar:
for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%%'" get name') do set "DNVER=%%B"
Error 2:
for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion' do set "IEFULLVER=%%C"
Al comando anterior le falta un )
antes do
. Debería ser:
for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion') do set "IEFULLVER=%%C"
Archivo por lotes de trabajo (test.cmd):
@echo off
setlocal EnableDelayedExpansion
for /f %%A in ('wmic os get osarchitecture ^| find /i "bit"') do set "OSARCH=%%A"
for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%%'" get name') do set "DNVER=%%B"
for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion') do set "IEFULLVER=%%C"
echo %OSARCH%
echo %DNVER%
echo %IEFULLVER%
endlocal
Salida de ejemplo:
F:\test>test
64-bit
4.5.2
11.0.9600.17691
Porcentajes de escape
El
%
carácter tiene un significado especial para los parámetros de la línea de comando y para los parámetros FOR.Para tratar un porcentaje como un carácter normal, duplíquelo:
%%
Fuentesintaxis
Otras lecturas
- Un índice AZ de la línea de comando CMD de Windows- Una excelente referencia para todo lo relacionado con la línea cmd de Windows.
- sintaxis- Caracteres de escape, delimitadores y comillas.
- wmic- Comando de Instrumental de Gestión de Windows.