& foi inesperado neste momento

1

Eu tenho um arquivo de lote que deve definir algumas variáveis no começo.

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 executar esses no prompt do CMD, (substituindo %% A para% A etc), eles funcionarão como esperado, mas quando eu executar o arquivo em lotes, a primeira linha é executada conforme esperado e eu recebo um erro & was unexpected at this time . Eu estou pensando que poderia ser fazer com o % após .NET , mas tem que estar lá caso contrário, a consulta wmi não retornará o valor que eu preciso.

    
por MarkCrawford 18.06.2016 / 10:33

1 resposta

0

"& foi inesperado neste momento" erro

Existem dois erros no seu arquivo de 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 único % após NET com escape. 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á sem um ) antes de do . Deve 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

Escape de porcentagens

The % character has a special meaning for command line parameters and FOR parameters.

To treat a percent as a regular character, double it:

%%

Sintaxe de origem

Leitura Adicional

por 18.06.2016 / 13:44