и был неожиданным в это время

и был неожиданным в это время

У меня есть пакетный файл, который должен задать некоторые переменные в начале.

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%

Если я запускаю их в командной строке CMD (заменяя %%A на %A и т. д.), они работают как и ожидалось, но когда я запускаю пакетный файл, первая строка выполняется как и ожидалось, а затем я получаю ошибку & was unexpected at this time. Я думаю, что это может быть связано с %after .NET, но он должен быть там, иначе запрос wmi не вернет нужное мне значение.

решение1

Ошибка «& было неожиданно в это время»

В вашем пакетном файле есть две ошибки.

Ошибка 1:

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

В приведенной выше команде необходимо экранировать один %после NET. %%Вместо этого используйте:

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

Ошибка 2:

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

В приведенной выше команде отсутствует )предыдущая часть do. Должно быть:

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

Рабочий пакетный файл (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

Пример вывода:

F:\test>test
64-bit
4.5.2
11.0.9600.17691

Проценты выхода из игры

Символ %имеет особое значение для параметров командной строки и параметров FOR.

Чтобы рассматривать процент как обычный символ, удвойте его:

%%

Источниксинтаксис


Дальнейшее чтение

Связанный контент