& foi inesperado neste momento

& foi inesperado neste momento

Eu tenho um arquivo em lote que deve definir algumas variáveis ​​no início.

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%

Se eu executá-los no prompt do CMD (substituindo %%A por %A etc), eles funcionarão conforme o esperado, mas quando executo o arquivo em lote, a primeira linha é executada conforme o esperado e recebo um & was unexpected at this timeerro. Estou pensando que pode ter a ver com %after .NET, mas tem que estar lá, caso contrário a consulta wmi não retornará o valor que preciso.

Responder1

Erro "& foi inesperado neste momento"

Existem dois erros no seu arquivo em lote.

Erro 1:

for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%'" get name') do set "DNVER=%%B"

O comando acima precisa ter o single %após NETescapado. Use %%em vez disso:

for /f "skip=1 tokens=4" %%B in ('wmic product where "name like 'Microsoft .NET%%'" get name') do set "DNVER=%%B"

Erro 2:

for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion' do set "IEFULLVER=%%C"

O comando acima está faltando um )before do. Deveria ser:

for /f "tokens=3" %%C in ('reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v svcVersion') do set "IEFULLVER=%%C"

Arquivo em lote de trabalho (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

Exemplo de saída:

F:\test>test
64-bit
4.5.2
11.0.9600.17691

Escapando porcentagens

O %caractere tem um significado especial para parâmetros de linha de comando e parâmetros FOR.

Para tratar uma porcentagem como um caractere normal, dobre-a:

%%

Fontesintaxe


Leitura adicional

informação relacionada