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 time
erro. 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 NET
escapado. 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
- Um índice AZ da linha de comando do Windows CMD- Uma excelente referência para todas as coisas relacionadas à linha cmd do Windows.
- sintaxe- Caracteres de escape, delimitadores e citações.
- wmic- Comando de instrumentação de gerenciamento do Windows.