Y fue inesperado en este momento.

Y fue inesperado en este momento.

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 timeerror. 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 NETescape. 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

información relacionada